본문 바로가기

728x90

프로그래머스(Java)/Level 2

(51)
[프로그래머스] 멀리뛰기 n의 경우의 수:n = 1일 때: 1가지 경우의 수 (1)n = 2일 때: 2가지 경우의 수 (1, 1), (2)n = 3일 때: 3가지 경우의 수 (1, 1, 1), (1, 2), (2, 1)n = 4일 때: 5가지 경우의 수 (1, 1, 1, 1), (1, 1, 2), (1, 2, 1), (2, 1, 1), (2, 2)n = 5일 때: 8가지 경우의 수 (1, 1, 1, 1, 1), (1, 1, 1, 2), (1, 1, 2, 1), (1, 2, 1, 1), (2, 1, 1, 1), (1, 2, 2), (2, 1, 2), (2, 2, 1)여기서 규칙을 발견할 수 있습니다:n의 경우의 수는 (n-1)의 경우의 수 + (n-2)의 경우의 수입니다.즉, 이 문제는 피보나치 수열 문제라는 것입니다.피보나치란?..
[프로그래머스] 의상 코드 힌트HashMap 사용: 의류의 종류별 개수를 저장하기 위해 HashMap을 사용합니다.조합 계산: 각 의류 종류별로 (의류 수 + 1)을 곱하여 모든 조합을 계산합니다. 여기서 +1은 해당 종류의 의류를 선택하지 않는 경우를 포함합니다.모든 종류를 선택하지 않는 경우 제외: 모든 조합에서 하나도 선택하지 않는 경우를 제외하기 위해 최종 결과에서 -1을 합니다.수학적 힌트이 문제는 조합을 다루는 문제입니다. 각 종류의 의상은 선택하거나 선택하지 않을 수 있습니다. 예를 들어, 두 종류의 의상(모자, 상의)이 있을 때, 각각 두 개의 옵션(착용하지 않음, 착용)이 있습니다. 이는 아래와 같은 조합을 형성합니다:모자를 착용하지 않음, 상의를 착용하지 않음모자를 착용하지 않음, 상의를 착용모자를 착용, ..
[프로그래머스] 타겟넘버 깊이 우선 탐색(DFS)으로 목표 값 찾기이 문제는 주어진 정수 배열 numbers와 목표 값 target을 사용하여 배열의 각 요소를 더하거나 빼는 모든 가능한 방법을 탐색하여 목표 값과 일치하는 경우의 수를 찾는 문제입니다.문제 풀이이 문제를 해결하기 위해 DFS(깊이 우선 탐색) 방법을 사용했습니다. 각 숫자를 더하거나 빼는 두 가지 선택지를 재귀적으로 탐색하여 목표 값과 일치하는 경우를 찾습니다.핵심 포인트재귀 함수 사용: 재귀 함수를 사용하여 모든 가능한 합계를 탐색합니다.기저 사례: 배열의 모든 숫자를 사용한 경우, 현재 합계가 목표 값과 일치하는지 확인합니다.재귀 호출: 각 숫자를 더하거나 뺀 두 가지 경우를 재귀적으로 탐색하여 결과를 합산합니다. 정답은 더보기 클릭 더보기class Solu..
[프로그래머스] 할인 행사 반복문을 이용한 구간 설정: discount 배열에서 연속된 10개의 요소를 차례대로 검사합니다조건을 만족하는지 확인: 각 구간에서는 want 배열에 포함된 상품을 찾아서 number 배열의 해당 상품 재고를 감소시킵니다. 그리고 남은 재고가 모두 0 이하인지 확인합니다.조건을 만족할 때 결과를 증가: 남은 재고가 모두 0 이하인 경우에만 결과 값을 증가시킵니다.최종 결과 반환: 모든 구간에 대해 조건을 만족하는 횟수를 최종 결과로 반환합니다. 정답은 더보기 클릭더보기import java.util.Arrays;class Solution { public int solution(String[] want, int[] number, String[] discount) { int result = ..
[프로그래머스] 괄호 회전하기 코드 힌트문자열 회전: 문자열을 회전시켜 모든 가능한 상태를 검사해야 합니다. 저는 이를 위해 substring 메서드를 사용했습니다. StringBuilder등 다양한 방법으로 회전시켜도 상관 없습니다스택을 이용한 괄호 매칭: 스택을 이용해 괄호의 짝을 맞춥니다. 열린 괄호가 스택에 쌓이고, 닫힌 괄호가 들어올 때 스택의 꼭대기와 짝이 맞으면 스택에서 제거합니다.올바른 괄호 문자열 판별: 모든 문자를 검사한 후 스택이 비어있다면, 해당 문자열은 올바른 괄호 문자열입니다.  정답은 더보기 클릭더보기더보기import java.util.Stack;class Solution { public int solution(String s) { int result = 0; /..
[프로그래머스] N개의 최소공배수 코드 힌트최대공약수(GCD) 계산: gcd 메소드는 두 숫자 n과 m의 최대공약수를 계산합니다. 유클리드 호제법을 사용하여 효율적으로 계산합니다. 이 방법은 n % m의 나머지가 0이 될 때까지 반복하여 두 숫자의 최대공약수를 찾습니다.최소공배수(LCM) 계산: lcm 메소드는 두 숫자 n과 m의 최소공배수를 계산합니다. 최소공배수는 두 숫자의 곱을 그들의 최대공약수로 나누어 계산됩니다.n * m / 최대공약수(gcd)배열의 최소공배수 계산: 배열의 모든 요소에 대해 최소공배수를 차례로 계산합니다. 초기값으로 배열의 첫 번째 요소를 설정하고, 나머지 요소들과의 최소공배수를 순차적으로 계산합니다. 정답은 더보기 클릭더보기더보기더보기더보기class Solution { public int solution..
[프로그래머스] 영어 끝말잇기 사용한 단어 추적하기:게임에서 이미 사용된 단어를 추적하기 위해 리스트나 Set을 사용할 수 있습니다.각 단어가 사용될 때마다 리스트에 추가하여 중복을 체크합니다. 단어 연결 규칙 확인:각 단어의 마지막 글자와 다음 단어의 첫 글자가 일치하는지 확인해야 합니다.이때, 전 단어의 마지막 글자와 현재 단어의 첫 글자를 비교하여 규칙이 지켜졌는지 확인합니다. 차례와 번호 계산:몇 번째 사람이 규칙을 어겼는지, 몇 번째 차례인지 계산해야 합니다.이 정보를 바탕으로 [사람 번호, 차례] 형식의 배열을 반환합니다.이를 위해 인덱스를 플레이어 수(n)로 나눈 나머지와 몫을 활용할 수 있습니다. 예외 처리:게임이 규칙에 맞게 끝난 경우, [0, 0]을 반환합니다.모든 단어가 규칙을 지켰는지 검사한 후 적절히 반환 값을..
[프로그래머스] 카펫 풀이 힌트문제 이해갈색 타일은 카펫의 테두리를 구성하고, 노란색 타일은 그 내부를 채웁니다.전체 타일 수는 갈색 타일과 노란색 타일의 합입니다.전체 넓이 계산전체 타일 수는 brown + yellow입니다.이 값을 기준으로 카펫의 가로(w)와 세로(h)를 찾아야 합니다.가로와 세로 길이의 조건카펫의 높이는 최소 3이어야 합니다. 이는 갈색 타일로 테두리를 두르기 위해 필요합니다.h가 3부터 시작하여 하나씩 증가시키면서 전체 넓이(area)를 h로 나누어 떨어지는지 확인합니다. 이때 나누어 떨어지면 해당 값을 w로 설정합니다.조건 검사계산한 w와 h가 테두리를 제외한 내부 노란색 타일의 넓이를 만족하는지 확인합니다.즉, (w - 2) * (h - 2)가 yellow와 같은지 확인합니다.조건을 만족하면 해당..

728x90