본문 바로가기

프로그래머스(Java)

(192)
[프로그래머스] k의 개수 코드 힌트for문으로 i부터 j까지 반복합니다주어진 범위 내의 모든 숫자를 하나씩 확인합니다.반복을 하면서 해당 숫자에 k가 몇 개 있는지를 파악합니다각 숫자의 자리수를 확인하여 k와 같은 숫자가 있는지 검사합니다.예를 들어, k가 1이고 현재 숫자가 11이면 결과 값에 +2가 되어야 합니다.또 다른 예로, k가 3이고 현재 숫자가 333이면 결과 값에 +3이 되어야 합니다.반복문이 종료되면 결과 값을 return합니다모든 숫자를 검사한 후, 최종적으로 k의 총 개수를 반환합니다.  정답은 더보기 클릭 더보기class Solution { public int solution(int i, int j, int k) { // 결과 값을 저장할 변수 초기화 int result = 0..
[프로그래머스] 가장 많이 받은 선물 코드 힌트1. 친구들의 인덱스 저장HashMap을 사용하여 친구 이름을 인덱스로 저장합니다.이렇게 하면 친구의 이름을 인덱스로 빠르게 변환할 수 있습니다.2. 선물 지수 배열 만들기각 친구가 받은 선물의 지수를 저장할 배열 giftIndex를 만듭니다.선물을 줄 때마다 주는 사람의 지수를 증가시키고 받는 사람의 지수를 감소시킵니다.3. 선물 주고받은 횟수 기록친구 간의 선물 주고받은 횟수를 기록할 2차원 배열 recode를 만듭니다.각 친구가 서로 몇 번씩 선물을 주고받았는지 기록합니다.4. 선물 지수 및 주고받은 횟수 업데이트주고받은 선물 정보를 바탕으로 각 친구의 선물 지수와 주고받은 횟수를 업데이트합니다.5. 다음 달 받을 선물 수 계산각 친구가 다음 달에 받을 선물 수를 계산합니다.친구 간의 선물..
[프로그래머스] 가까운 수 코드 힌트가까운 수를 찾는 문제이기 때문에 abs(절대값)로 판단하기:예를 들어, |-1| = 1, |1| = 1입니다.가까운 숫자가 여러 개 있을 때 낮은 숫자를 반환하기:예를 들어, n = 20일 때 19와 21이 있으면 19를 반환해야 합니다.배열을 오름차순으로 정렬하기:힌트 2번을 효율적으로 해결하기 위해서 배열을 정렬합니다.  정답은 더보기 클릭더보기import java.util.*;class Solution { public int solution(int[] array, int n) { // 배열을 오름차순으로 정렬 Arrays.sort(array); // 정답을 저장할 변수, 초기값으로 첫 번째 요소를 저장 i..
[프로그래머스] 정수 삼각형 문제 힌트문제 이해:주어진 삼각형의 맨 위에서 시작하여 아래로 내려가면서 합이 최대가 되는 경로를 찾아야 합니다.각 경로의 합은 이동 경로의 숫자를 모두 더한 값입니다.동적 계획법 적용:동적 계획법을 사용하여 부분 문제를 해결함으로써 전체 문제를 해결합니다.여기서는 각 경로의 최대 합을 구할 때, 이전 단계의 계산 결과를 이용합니다.bottom-up 접근:삼각형의 맨 아래에서부터 시작하여 위로 올라가면서 각 위치에서의 최대 합을 계산합니다.이 접근 방식은 각 단계에서 최적 부분 구조를 활용할 수 있도록 합니다. 정답은 더보기 클릭더보기class Solution { public int solution(int[][] triangle) { // 동적 계획법을 위한 bottom-up 방..
[프로그래머스] 2의 영역 풀이 힌트변수 초기화:s와 e는 각각 첫 번째 2와 마지막 2의 위치를 저장합니다. 초기값은 -1로 설정하여 배열에 2가 없는 경우를 처리합니다.배열 순회:배열을 순회하면서 arr[i]가 2일 때 s가 -1이면 s를 i로 설정합니다.s가 이미 설정된 경우(s != -1), e를 i로 설정합니다.특별한 경우 처리:배열에 2가 없는 경우 (s == -1), [-1]을 반환합니다.배열에 2가 한 번만 등장하는 경우 (s != -1 && e == -1), [2]을 반환합니다.부분 배열 생성:s와 e 사이의 부분 배열을 생성하고 result 배열에 복사합니다.결과 반환:최종적으로 result 배열을 반환합니다. 정답은 더보기 클릭더보기class Solution { public int[] solution(in..
[프로그래머스] 약수 구하기 코드 설명리스트 초기화약수를 저장하기 위해 리스트를 초기화합니다.반복문을 통해 1부터 n까지 순회1부터 n까지의 모든 수를 확인합니다. 약수 확인n % i == 0 조건을 통해 i가 n의 약수인지 확인합니다.i가 n의 약수라면 리스트에 추가합니다.리스트를 배열로 변환리스트의 크기만큼의 배열을 초기화합니다.리스트의 요소를 배열로 복사합니다.배열 반환약수 배열을 반환합니다.코드 힌트리스트 사용 이유: 리스트는 크기가 동적으로 변할 수 있어 약수를 저장하기에 적합합니다.반복문과 조건문: 반복문을 사용하여 모든 수를 순회하고, 조건문을 통해 약수인지 확인합니다.배열 변환: 최종적으로 리스트를 배열로 변환하여 반환합니다. 정답은 더보기 클릭더보기더보기import java.util.*;class Solution {..
[프로그래머스] 자연수 뒤집어 배열로 만들기 코드 힌트첫 번째 접근 방식: 나머지 연산자를 활용해서 문제 풀기숫자 n의 길이를 구하기숫자 n을 문자열로 변환하여 그 길이를 구합니다.결과 배열 생성구한 길이만큼의 배열을 생성합니다.숫자의 각 자리수를 배열에 저장하기for 루프를 사용하여 숫자의 각 자리수를 배열에 저장합니다.n % 10을 사용하여 현재 자리수를 구하고, n /= 10을 사용하여 다음 자리수로 이동합니다.결과 배열 반환최종적으로 결과 배열을 반환합니다.두 번째 접근 방식: n을 문자열로 활용하여 문제 풀기숫자 n을 문자열로 변환숫자 n을 문자열로 변환합니다.문자열 뒤집기문자열을 뒤집기 위해 StringBuilder를 사용합니다.문자열을 배열로 변환뒤집은 문자열을 각 문자를 분리하여 문자열 배열에 저장합니다.문자열 배열을 정수 배열로 변..
[프로그래머스] 수열과 구간 쿼리 4 코드 힌트queries 배열에 있는 배열 [s, e, k]를 꺼내온다각 query마다 s 각 쿼리에서 시작 인덱스(s)부터 종료 인덱스(e)까지의 범위를 순회하면서, 해당 인덱스(i)가 k의 배수인지 확인합니다. 만약 i가 k의 배수라면 arr[i] 값을 1 증가시킵니다.추가 설명i % k == 0의 조건을 사용하여 i가 k의 배수인지를 확인합니다. 이 조건이 참이면 해당 인덱스의 배열 값을 1 증가시킵니다.최종적으로 변경된 배열을 반환합니다.예시queries 배열:[0, 4, 1]: 0에서 4까지 모든 인덱스가 1의 배수이므로 모든 요소에 1을 더함.[0, 3, 2]: 0에서 3까지 인덱스 중 2의 배수는 0과 2. 따라서 arr[0]과 arr[2]에 1을 더함.[0, 3, 3]: 0에서 3까지 인덱스..