https://programmers.co.kr/learn/courses/30/lessons/43165 코딩테스트 연습 - 타겟 넘버 n개의 음이 아닌 정수가 있습니다. 이 수를 적절히 더하거나 빼서 타겟 넘버를 만들려고 합니다. 예를 들어 [1, 1, 1, 1, 1]로 숫자 3을 만들려면 다음 다섯 방법을 쓸 수 있습니다. -1+1+1+1+1 = 3 +1-1+1+1+ programmers.co.kr 해설 : 사용할 수 있는 수들이 담긴 배열과 targetNumber가 주어질 때 주어진 배열의 수들을 덧셈 혹은 뺄셈 연산하여 타겟 넘버를 만들 수 있는 경우의 수를 찾는 문제이다. 풀이 : DFS(깊이우선 탐색)를 사용해서 해결할 수 있는 문제이다. 재귀함수의 매개변수로 현재 값, 현재 값을 만들기 위해 사..
https://programmers.co.kr/learn/courses/30/lessons/42895 코딩테스트 연습 - N으로 표현 programmers.co.kr 해설 : 주어진 수 N을 사칙연산만으로 조합하여 targetNumber를 찾는데에 몇 번의 연산이 필요한지 찾는 문제이다. 풀이 : 사칙연산을 진행하며 나온 결괏값을 중복을 방지하기 위해 set 자료구조로 list에 append 한다. 이 결괏값 배열의 원소들에 반복적으로 N으로 사칙연산을 수행하여 targetNumber가 나올 때까지 횟수를 카운팅한다. 123456789101112131415161718192021def solution(N, number): S = [0, {N}] if N == number: return 1 for i in ..
https://programmers.co.kr/learn/courses/30/lessons/42862 코딩테스트 연습 - 체육복 점심시간에 도둑이 들어, 일부 학생이 체육복을 도난당했습니다. 다행히 여벌 체육복이 있는 학생이 이들에게 체육복을 빌려주려 합니다. 학생들의 번호는 체격 순으로 매겨져 있어, 바로 앞번 programmers.co.kr 해설 : 총 인원, 체육복을 잃어버린 사람, 여분 체육복이 있는 사람의 배열이 주어질 때, 여분 체육복이 있는 사람은 양 옆의 사람에게 체육복을 빌려줄 수 있다. 이 때 최대한 많은 사람이 체육복을 사용하는 경우를 찾는 문제이다. 풀이 : 그리디 알고리즘을 사용하여 해결하는 문제이다. 체육복을 빌려줄 때, 왼쪽에 있는 사람부터 빌려줘야 가장 많이 빌려줄 수 있는 ..
https://programmers.co.kr/learn/courses/30/lessons/42840 코딩테스트 연습 - 모의고사 수포자는 수학을 포기한 사람의 준말입니다. 수포자 삼인방은 모의고사에 수학 문제를 전부 찍으려 합니다. 수포자는 1번 문제부터 마지막 문제까지 다음과 같이 찍습니다. 1번 수포자가 찍는 programmers.co.kr 해설 : 수열로 이루어진 패턴 3개가 주어질 때, 각 패턴으로 시험의 문제를 찍었을 경우 어떤 패턴의 사람이 점수가 가장 높은지 맞추는 문제이다. 풀이 : 문제의 정답들이 담긴 배열을 미리 최대 1만개까지 구현해놓은 후 이를 주어진 문제의 수만큼 비교하여 실제 맞춘 문제의 개수를 카운팅하고 최고점수를 받을 수 있는 패턴을 모두 출력한다. 1234567891011..
https://programmers.co.kr/learn/courses/30/lessons/42748 코딩테스트 연습 - K번째수 [1, 5, 2, 6, 3, 7, 4] [[2, 5, 3], [4, 4, 1], [1, 7, 3]] [5, 6, 3] programmers.co.kr 해설: 어떤 수열을 i부터 j번째 원소까지 자르고 정렬했을 때 K번째에 위치하는 수를 출력하는 문제이다. 풀이 : python의 list slice을 사용하여 i부터 j번째 원소까지 자른 후 sorted함수로 정렬시킨다. 이후 K번째 인덱스를 리턴하면 된다. 12345def solution(array, commands): answer = [] for c in commands: answer.append(sorted(array[c[..
https://programmers.co.kr/learn/courses/30/lessons/42626 코딩테스트 연습 - 더 맵게 매운 것을 좋아하는 Leo는 모든 음식의 스코빌 지수를 K 이상으로 만들고 싶습니다. 모든 음식의 스코빌 지수를 K 이상으로 만들기 위해 Leo는 스코빌 지수가 가장 낮은 두 개의 음식을 아래와 같 programmers.co.kr 해설 : 맵기 정도인 스코빌 지수들이 나열될 배열이 주어질 때 가장 낮은 두 스코빌지수를 섞어 새로운 스코빌 지수를 만든다. 이 때, 모든 스코빌 지수가 K 이상이 될 때까지 최소 횟수로 섞은 경우를 리턴하면 된다. 풀이 : heap을 사용하여 해결하면 된다. 처음 시도때는 두 min 값을 찾을 때, 매 번 새로 sort하여 구현하려 하였으나 시간초..
https://programmers.co.kr/learn/courses/30/lessons/42586 코딩테스트 연습 - 기능개발 프로그래머스 팀에서는 기능 개선 작업을 수행 중입니다. 각 기능은 진도가 100%일 때 서비스에 반영할 수 있습니다. 또, 각 기능의 개발속도는 모두 다르기 때문에 뒤에 있는 기능이 앞에 있는 programmers.co.kr 해설 : 현재 개발진도가 담겨있는 배열과 하루마다 진척되는 작업률이 담겨있는 배열이 주어질 때 하루 하루가 지나 작업률이 100%가 되면 작업이 완료된다. 하지만 이 작업은 batch system의 구조로 되어있어 앞의 작업이 먼저 끝나야 뒤의 작업을 완료할 수 있다. 여기서 작업이 완료되는 날마다 몇 개의 작업들이 완료되는지 출력하면 된다. 풀이 : 모..
https://programmers.co.kr/learn/courses/30/lessons/42576 코딩테스트 연습 - 완주하지 못한 선수 수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다. 마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수 programmers.co.kr 해설 : 참가선수와 완주선수들의 이름이 담긴 두 배열이 주어질 때 참가했지만 완주하지 못한 선수의 이름을 출력하면 된다. 해설 : 두 배열을 모두 정렬한다면 앞에서부터 zip으로 비교했을 때 같지 않은 값이 나오는 것이 완주하지 못한 선수 이름이므로 이때 배열의 원소를 출력하고 종료한다. 12def solution(participant, co..
https://programmers.co.kr/learn/courses/30/lessons/12899 코딩테스트 연습 - 124 나라의 숫자 programmers.co.kr 해설 : 주어진 10진수를 124나라의 숫자 규칙에 맞추어 바꾸면 된다. 풀이 : 3으로 나눈 나머지와 몫을 이용해 진수를 변환한다. 1234567def solution(n): numbers = ['4', '1', '2'] answer = '' while n: answer = numbers[n % 3] + answer n = n // 3 - (n % 3 == 0) return answercs