본문 바로가기

Algorithm

(402)
[프로그래머스] 우박수열 정적분 Level. 2 문제 콜라츠 추측이란 로타르 콜라츠(Lothar Collatz)가 1937년에 제기한 추측으로 모든 자연수 k에 대해 다음 작업을 반복하면 항상 1로 만들 수 있다는 추측입니다. 1-1. 입력된 수가 짝수라면 2로 나눕니다. 1-2. 입력된 수가 홀수라면 3을 곱하고 1을 더합니다. 2.결과로 나온 수가 1보다 크다면 1번 작업을 반복합니다. 예를 들어 주어진 수가 5 라면 5 ⇒ 16 ⇒ 8 ⇒ 4 ⇒2 ⇒ 1 이되어 총 5번만에 1이 됩니다. 수가 커졌다 작아지기를 반복하는 모습이 비구름에서 빗방울이 오르락내리락하며 우박이 되는 모습과 비슷하다고 하여 우박수 또는 우박수열로 불리기도 합니다. 현재 이 추측이 참인지 거짓인지 증명되지 않았지만 약 1해까지의 수에서 반례가 없음이 밝혀져 ..
[프로그래머스] 광물캐기 / Greedy , DFS(백트래킹) Level. 2 문제 마인은 곡괭이로 광산에서 광석을 캐려고 합니다. 마인은 다이아몬드 곡괭이, 철 곡괭이, 돌 곡괭이를 각각 0개에서 5개까지 가지고 있으며, 곡괭이로 광물을 캘 때는 피로도가 소모됩니다. 각 곡괭이로 광물을 캘 때의 피로도는 아래 표와 같습니다. 예를 들어, 철 곡괭이는 다이아몬드를 캘 때 피로도 5가 소모되며, 철과 돌을 캘때는 피로도가 1씩 소모됩니다. 각 곡괭이는 종류에 상관없이 광물 5개를 캔 후에는 더 이상 사용할 수 없습니다. 마인은 다음과 같은 규칙을 지키면서 최소한의 피로도로 광물을 캐려고 합니다. 사용할 수 있는 곡괭이중 아무거나 하나를 선택해 광물을 캡니다. 한 번 사용하기 시작한 곡괭이는 사용할 수 없을 때까지 사용합니다. 광물은 주어진 순서대로만 캘 수 있습니다...
[프로그래머스] 디펜스 게임 / priority_queue Level.2 문제 준호가 처음 가지고 있는 병사의 수 n, 사용 가능한 무적권의 횟수 k, 매 라운드마다 공격해오는 적의 수가 순서대로 담긴 정수 배열 enemy가 매개변수로 주어집니다. 준호가 몇 라운드까지 막을 수 있는지 return 하도록 solution 함수를 완성해주세요. * 제한사항 - 1 ≤ n ≤ 1,000,000,000 - 1 ≤ k ≤ 500,000 - 1 ≤ enemy의 길이 ≤ 1,000,000 - 1 ≤ enemy[i] ≤ 1,000,000 - enemy[i]에는 i + 1 라운드에서 공격해오는 적의 수가 담겨있습니다. - 모든 라운드를 막을 수 있는 경우에는 enemy[i]의 길이를 return 해주세요. 풀이 #include #include #include #include u..
[프로그래머스(Java)] 마지막 두 원소 / Arrays.copyOf() Level. 0 문제 정수 리스트 num_list가 주어질 때, 마지막 원소가 그전 원소보다 크면 마지막 원소에서 그전 원소를 뺀 값을 마지막 원소가 그전 원소보다 크지 않다면 마지막 원소를 두 배한 값을 추가하여 return하도록 solution 함수를 완성해주세요. * 제한사항 - 2 ≤ num_list의 길이 ≤ 10 - 1 ≤ num_list의 원소 ≤ 9 풀이 import java.util.Arrays; class Solution { public int[] solution(int[] num_list) { int N = num_list.length; int answer[] = Arrays.copyOf(num_list, N+1); answer[N] = answer[N-1]>answer[N-2]?an..
[프로그래머스(Java)] 접두사인지 확인하기 / String.startsWith() Level.0 문제 어떤 문자열에 대해서 접두사는 특정 인덱스까지의 문자열을 의미합니다. 예를 들어, "banana"의 모든 접두사는 "b", "ba", "ban", "bana", "banan", "banana"입니다. 문자열 my_string과 is_prefix가 주어질 때, is_prefix가 my_string의 접두사라면 1을, 아니면 0을 return 하는 solution 함수를 작성해 주세요. * 제한사항 - 1 ≤ my_string의 길이 ≤ 100 - 1 ≤ is_prefix의 길이 ≤ 100 - my_string과 is_prefix는 영소문자로만 이루어져 있습니다. 풀이.1 class Solution { public int solution(String my_string, String is_..
[프로그래머스(Java)] 조건에 맞게 수열 변환하기 3 Level.0 문제 정수 배열 arr와 자연수 k가 주어집니다. 만약 k가 홀수라면 arr의 모든 원소에 k를 곱하고, k가 짝수라면 arr의 모든 원소에 k를 더합니다. 이러한 변환을 마친 후의 arr를 return 하는 solution 함수를 완성해 주세요. * 제한사항 - 1 ≤ arr의 길이 ≤ 1,000,000 - 1 ≤ arr의 원소의 값 ≤ 100 - 1 ≤ k ≤ 100 풀이 class Solution { public int[] solution(int[] arr, int k) { int[] answer = new int[arr.length]; for(int i=0; i
[프로그래머스(Java)] 길이에 따른 연산 / reduce() Level.0 문제 정수가 담긴 리스트 num_list가 주어질 때, 리스트의 길이가 11 이상이면 리스트에 있는 모든 원소의 합을 10 이하이면 모든 원소의 곱을 return하도록 solution 함수를 완성해주세요. 제한사항 2 ≤ num_list의 길이 ≤ 201 ≤ num_list의 원소 ≤ 9num_list의 원소를 모두 곱했을 때 2,147,483,647를 넘는 입력은 주어지지 않습니다. 풀이.1 import java.util.stream.*; class Solution { public int solution(int[] num_list) { return num_list.length>10?IntStream.of(num_list).sum():IntStream.of(num_list).reduce(1..
[프로그래머스(Java)] 배열의 길이에 따라 다른 연산하기 Level.0 문제 정수 배열 arr과 정수 n이 매개변수로 주어집니다. arr의 길이가 홀수라면 arr의 모든 짝수 인덱스 위치에 n을 더한 배열을, arr의 길이가 짝수라면 arr의 모든 홀수 인덱스 위치에 n을 더한 배열을 return 하는 solution 함수를 작성해 주세요. * 제한사항 - 1 ≤ arr의 길이 ≤ 1,000 - 1 ≤ arr의 원소 ≤ 1,000 - 1 ≤ n ≤ 1,000 풀이.1 import java.util.stream.*; class Solution { public int[] solution(int[] arr, int n) { return IntStream.range(0, arr.length).map(i -> arr.length%2==0?((i+1)%2==0?arr[i..