반응형

알고리즘/programmers 18

[프로그래머스]H-Index[JAVA, 자바]

문제 설명 H-Index는 과학자의 생산성과 영향력을 나타내는 지표입니다. 어느 과학자의 H-Index를 나타내는 값인 h를 구하려고 합니다. 위키백과1에 따르면, H-Index는 다음과 같이 구합니다. 어떤 과학자가 발표한 논문 n편 중, h번 이상 인용된 논문이 h편 이상이고 나머지 논문이 h번 이하 인용되었다면 h의 최댓값이 이 과학자의 H-Index입니다. 어떤 과학자가 발표한 논문의 인용 횟수를 담은 배열 citations가 매개변수로 주어질 때, 이 과학자의 H-Index를 return 하도록 solution 함수를 작성해주세요. 풀이 방법 간단한 정렬문제이다. 정렬을 하게 된다면, 이하의 값을 고려하지 않아도 된다. 알아야되는 개념 정렬 import java.util.*; class Solu..

[프로그래머스]레벨2- 소수 찾기 [JAVA, 자바]

문제 설명 한자리 숫자가 적힌 종이 조각이 흩어져있습니다. 흩어진 종이 조각을 붙여 소수를 몇 개 만들 수 있는지 알아내려 합니다. 각 종이 조각에 적힌 숫자가 적힌 문자열 numbers가 주어졌을 때, 종이 조각으로 만들 수 있는 소수가 몇 개인지 return 하도록 solution 함수를 완성해주세요. 풀이 방법 백트래킹으로 numbers로 구할 수 있는 모든 숫자를 구한다.(조합) 구한 숫자들을 소수인지 판별한다. 백트래킹 개념이 잡혀있지 않다면, https://youtu.be/Enz2csssTCs 바킹독님의 백트래킹 강의를 들어보는 것이 좋다. 백준 사이트의 n과 m을 풀어보면서 백트래킹을 익혀보자 ! 알아야되는 개념 백트래킹 소수 판별 알고리즘 import java.util.*; class So..

[프로그래머스]삼각 달팽이[JAVA, 자바]

문제 설명 정수 n이 매개변수로 주어집니다. 다음 그림과 같이 밑변의 길이와 높이가 n인 삼각형에서 맨 위 꼭짓점부터 반시계 방향으로 달팽이 채우기를 진행한 후, 첫 행부터 마지막 행까지 모두 순서대로 합친 새로운 배열을 return 하도록 solution 함수를 완성해주세요. 풀이 방법 규칙을 파악해서 빡구현하는 문제였다. 먼저 삼각형의 규칙은 ↓ → ↖︎ 로 숫자가 증가하는 것을 볼 수 있다. 이를 통해 2차원 배열을 생성해서 증가하는대로 값을 넣어주면 된다. 알아야되는 개념 반복문 배열 class Solution { public int[] solution(int n) { int[] answer = {}; int[][] arr = new int[n][n]; int x = -1; int y = 0; i..

[프로그래머스]124 나라의 숫자 [JAVA, 자바]

문제 설명 124 나라가 있습니다. 124 나라에서는 10진법이 아닌 다음과 같은 자신들만의 규칙으로 수를 표현합니다. 124 나라에는 자연수만 존재합니다. 124 나라에는 모든 수를 표현할 때 1, 2, 4만 사용합니다. 예를 들어서 124 나라에서 사용하는 숫자는 다음과 같이 변환됩니다. 10진법 124 나라 10진법 124 나라 1 1 6 14 2 2 7 21 3 4 8 22 4 11 9 24 5 12 10 41 자연수 n이 매개변수로 주어질 때, n을 124 나라에서 사용하는 숫자로 바꾼 값을 return 하도록 solution 함수를 완성해 주세요. 풀이 방법 10진법을 3진법으로 변환하는데 원래 3진법인 0~2 대신에 4, 1, 2를 대입하면 해결되는 문제였다. 단 정확히 3으로 나누어 떨어지..

[프로그래머스]프린터[JAVA, 자바]

프로그래머스 팀에서는 기능 개선 작업을 수행 중입니다. 각 기능은 진도가 100%일 때 서비스에 반영할 수 있습니다. 일반적인 프린터는 인쇄 요청이 들어온 순서대로 인쇄합니다. 그렇기 때문에 중요한 문서가 나중에 인쇄될 수 있습니다. 이런 문제를 보완하기 위해 중요도가 높은 문서를 먼저 인쇄하는 프린터를 개발했습니다. 이 새롭게 개발한 프린터는 아래와 같은 방식으로 인쇄 작업을 수행합니다. 인쇄 대기목록의 가장 앞에 있는 문서(J)를 대기목록에서 꺼냅니다. 나머지 인쇄 대기목록에서 J보다 중요도가 높은 문서가 한 개라도 존재하면 J를 대기목록의 가장 마지막에 넣습니다. 그렇지 않으면 J를 인쇄합니다. 예를 들어, 4개의 문서(A, B, C, D)가 순서대로 인쇄 대기목록에 있고 중요도가 2 1 3 2 라..

[프로그래머스]기능개발[JAVA, 자바]

프로그래머스 팀에서는 기능 개선 작업을 수행 중입니다. 각 기능은 진도가 100%일 때 서비스에 반영할 수 있습니다. 또, 각 기능의 개발속도는 모두 다르기 때문에 뒤에 있는 기능이 앞에 있는 기능보다 먼저 개발될 수 있고, 이때 뒤에 있는 기능은 앞에 있는 기능이 배포될 때 함께 배포됩니다. 먼저 배포되어야 하는 순서대로 작업의 진도가 적힌 정수 배열 progresses와 각 작업의 개발 속도가 적힌 정수 배열 speeds가 주어질 때 각 배포마다 몇 개의 기능이 배포되는지를 return 하도록 solution 함수를 완성하세요. 풀이 방법 큐를 이용하는 문제였다. 먼저 모든 데이터를 큐에 넣어준다. 앞의 기능이 100퍼센트 이상이 되지 않으면 배포할 수 없으니, 큐의 top 부분만 참조하여 문제를 해..

[프로그래머스]스킬트리[JAVA, 자바]

문제 설명 선행 스킬이란 어떤 스킬을 배우기 전에 먼저 배워야 하는 스킬을 뜻합니다. 예를 들어 선행 스킬 순서가 스파크 → 라이트닝 볼트 → 썬더일때, 썬더를 배우려면 먼저 라이트닝 볼트를 배워야 하고, 라이트닝 볼트를 배우려면 먼저 스파크를 배워야 합니다. 위 순서에 없는 다른 스킬(힐링 등)은 순서에 상관없이 배울 수 있습니다. 따라서 스파크 → 힐링 → 라이트닝 볼트 → 썬더와 같은 스킬트리는 가능하지만, 썬더 → 스파크나 라이트닝 볼트 → 스파크 → 힐링 → 썬더와 같은 스킬트리는 불가능합니다. 선행 스킬 순서 skill과 유저들이 만든 스킬트리1를 담은 배열 skill_trees가 매개변수로 주어질 때, 가능한 스킬트리 개수를 return 하는 solution 함수를 작성해주세요. 풀이 방법 ..

[프로그래머스]다리를 지나는 트럭[JAVA, 자바]

문제 설명 트럭 여러 대가 강을 가로지르는 일 차선 다리를 정해진 순으로 건너려 합니다. 모든 트럭이 다리를 건너려면 최소 몇 초가 걸리는지 알아내야 합니다. 트럭은 1초에 1만큼 움직이며, 다리 길이는 bridge_length이고 다리는 무게 weight까지 견딥니다. ※ 트럭이 다리에 완전히 오르지 않은 경우, 이 트럭의 무게는 고려하지 않습니다. 예를 들어, 길이가 2이고 10kg 무게를 견디는 다리가 있습니다. 무게가 [7, 4, 5, 6]kg인 트럭이 순서대로 최단 시간 안에 다리를 건너려면 다음과 같이 건너야 합니다. 풀이 방법 먼저 지나간 트럭이 먼저 나오기 때문에 선입선출 구조를 가진 queue를 사용해서 풀 수 있다. 하지만 현재 무게를 구하기 위해 인덱스를 사용했기 때문에 나는 arra..

[프로그래머스]같은 숫자는 싫어[JAVA, 자바]

문제 설명 배열 arr가 주어집니다. 배열 arr의 각 원소는 숫자 0부터 9까지로 이루어져 있습니다. 이때, 배열 arr에서 연속적으로 나타나는 숫자는 하나만 남기고 전부 제거하려고 합니다. 단, 제거된 후 남은 수들을 반환할 때는 배열 arr의 원소들의 순서를 유지해야 합니다. 예를 들면, arr = [1, 1, 3, 3, 0, 1, 1] 이면 [1, 3, 0, 1] 을 return 합니다. arr = [4, 4, 4, 3, 3] 이면 [4, 3] 을 return 합니다. 배열 arr에서 연속적으로 나타나는 숫자는 제거하고 남은 수들을 return 하는 solution 함수를 완성해 주세요. 풀이 방법 스택을 이용하거나, Arraylist를 풀면 되는 문제이다. 나는 스택을 사용했고, stack의 t..

[프로그래머스]3진법 뒤집기[JAVA, 자바]

문제 설명 자연수 n이 매개변수로 주어집니다. n을 3진법 상에서 앞뒤로 뒤집은 후, 이를 다시 10진법으로 표현한 수를 return 하도록 solution 함수를 완성해주세요. 풀이 방법 10진수를 3진법으로 변환한 값을 차례대로 stringbuffer에 넣어준다. 그 후 문자로 인덱스에 접근해서 다시 10진수로 변환하면 되는 간단한 문제였다. 알아야되는 개념 Stringbuffer class Solution { public int solution(int n) { int answer = 0; StringBuffer str = new StringBuffer(); while(n > 0) { str.append(n%3); n /= 3; } for(int i=0;i

반응형