본문 바로가기

코딩테스트20

Programmers 2 레벨 테스트 2 Programmers 2 레벨 테스트 2 문제 배열에 숫자들이 주어진다. 위에 그림처럼 배열은 원형으로 이루어져있다. 배열 안에 있는 연속된 숫자들을 더해서, 더한 숫자들의 개수를 구하는 것 예를 들어 연속된 숫자 하나 : [4], [7], [9], [8] 연속된 숫자 둘 : [8, 4], [4, 7], [7, 9], [9, 8] 연속된 숫자 셋 : [8, 4, 7], [4, 7, 9], [9, 8, 4] 연속된 숫자 넷 : [8, 4, 7, 9] 위의 숫자들을 더하고, 반복된 숫자들을 제거 후, 개수를 세면 된다 문제 풀이 더한 숫자들은 set()에 넣을 것 그렇게 해야, 반복된 숫자들을 알아서 없앨 수 있다 배열 elements가 주어지는데 elements + elements를 해서, 배열을 두 배로.. 2023. 2. 7.
Programmers 2 레벨 테스트 1 Programmers 2 레벨 테스트 1 문제 숫자가 담겨있는 배열이 주어진다. 그 배열 안에 있는 숫자들을 나열하여, 제일 큰 숫자를 만드는 것이다. [6, 20, 4] 가 있다면 6420을 출력하는 것 각 숫자는 1부터 1000까지의 숫자다. 즉 999가 제일 큰 숫자. 문제 풀이 배열 안에 있는 숫자들을 문자열로 만든다 그렇게 하면 숫자의 제일 앞 자리 숫자를 기준으로 순차적으로 배열을 해준다 각 문자열을 4번을 반복시키고, 그 중 4자리를 가지고 온다. 4자리는 1부터 10000까지의 숫자가 주어져서 최대 4자리가 되는 것 4번 반복하는 이유는 (람다를 사용한다) [6, 21, 2, 8] 이 주어졌을 때 먼저 정렬을 하면 [8, 6, 21, 2] 가 된다 제일 크게 만드려면 86221이어야 한다 .. 2023. 2. 7.
[Python] 백준 1083 소트 🧑‍💻 [Python] 백준 1083 소트 Gold 5 - 그리디 문제풀이 최대한 제일 큰 숫자가 앞으로 와야 한다 숫자의 움직임에 제한이 있다 일단 swap만큼의 숫자들을 슬라이스를 통해 슬라이스 안에 제일 큰 숫자를 가지고 온다 그리고 i까지, 뒤로 그 큰 숫자를 앞으로 가지고 온다 이것을 swap이 0이 될때까지 반복을 한다 코드 N = int(input()) array = list(map(int, input().split())) swap = int(input()) for i in range(N): max_num = max(array[i : i + swap + 1]) max_num_index = array.index(max_num) for j in range(max_num_index, i, -1):.. 2023. 2. 1.
[Python] 백준 12931 두 배 더하기 🧑‍💻 [Python] 백준 12931 두 배 더하기 Gold 5 - 그리디 제일 중요하게 생각해야 하는 것은 B에서 배열 A를 만드는 것이다 즉 B에 있는 원소들을 다 0으로 만들어야 하는 것 즉 B에서 값 하나씩 1을 빼는 것 그리고 B에서 모든 값을 2로 나눠서 0을 만드는 것으로 반대로 생각하면 된다 문제풀이 최소를 구하는 것이니깐 모든 값을 2로 나누는 것을 먼저 생각한다 for문을 통해, 모든 숫자가 숫자 % 2 == 0 로 떨어지면, count에 1을 더한다 그리고 for문을 순회할 때에, 각 숫자들을 2로 나눈 것을 temp 리스트에 넣는다 그리고 만약에 for문을 아무 문제 없이 순회를 했다면, temp리스트를 B로 업데이트 한다 반대로 위에서 for문을 통해 순회를 했는데, 홀수를 구한.. 2023. 2. 1.
[Python] 백준 2109 순회강연 🧑‍💻 [Python] 백준 2109 순회강연 Gold 3 - 힙 강연을 하는데, 각 강연마다 강연료와 몇 일 안에 강연을 하는지 입력을 받는다 최대한 강연료를 많이 받을 수 있도록 코드를 짜야 한다 문제풀이 1 힙 리스트 안에, 강연료 기준으로 최대 힙으로 넣는다 즉 튜플 형태로 힘 리스트에 넣는 것 그리고 힙을 하나씩 빼면서, 강연을 해야하는 날이, False이면 True로 바꾼다 강연을 해야 하는 날이, True일 경우, 그 전날을 본다. 이것을 False를 찾을 때 까지 뒤로 탐색을 한다 만약 1일차까지 다 True일 경우는, 그 강연은 못 하는 것이다 문제풀이 2 일단 강의 날짜 기준으로 오름차순으로 정렬을 한다 그리고 강연료를 힙 안에 넣어준다 힙의 길이는 날짜와 같거나, 적어야 한다 넣었는데.. 2023. 1. 20.
[Python] 백준 1715 - 카드 정렬하기 🧑‍💻 [Python] 백준 1715 - 카드 정렬하기 Gold 4 - 그리디, 힙 heappop을 2번씩 해서, 나온 숫자들을 더해준다 더해준 숫자들을 다시 heap에 넣어준다 이것을 heap에 숫자가 2개 미만일 때까지 반복해서 해준다 문제풀이 힙에서 2개의 숫자를 pop으로 뽑아와서, 더해주는 것이다 제일 낮은 숫자끼리 더하면, 최소 숫자를 만들 수 있다 코드 import heapq N = int(input()) heap = [] for n in range(N): heapq.heappush(heap, int(input())) answer = 0 while True: if len(heap) 2023. 1. 18.
[Python] 백준 2696 - 중앙값 구하기 🧑‍💻 [Python] 백준 2696 - 중앙값 구하기 Gold 3 - heapq left와 right 힙 그리고 중간 값을 가지고 문제를 푸는 것이다 left는 최대 힙을 구하는 것이고, right은 최소힙을 구하는 것이다 middle은 제일 최근에 구한 중간 값이다 즉 수열의 원소가 middle보다 작으면 left로 들어가야 하고, 크면 right로 들어가야 한다 코드 import heapq import math T = int(input()) for _ in range(T): N = int(input()) nums = [] for _ in range(int(math.ceil(N / 10))): nums += list(map(int, input().split())) left, right = [], [].. 2023. 1. 17.
🧑‍💻 [Python] 백준 14235 - 크리스마스 선물 🧑‍💻 [Python] 백준 14235 - 크리스마스 선물 Silver 3 - Heap 입력된 값을 순회한다 입력된 값이 0이 아니면 선물을 충전하는 거점 0은 아이들의 집이다 문제풀이 입력 값들을 튜플로 받아서 리스트에 넣는다 그리고 for문을 순회하며 0인지 아닌지 구별한다 0이 아니면 선물을 충전하는 거점 즉 heap에 최대힙으로 선물에 대한 숫자를 넣는다 0이면, heap에 선물이 들어 있는지 없는지를 구별한다 heap에 숫자가 있으면, 제일 앞에 있는 숫자, 즉 제일 큰 숫자를 출력한다 없으면 해당 아이에게 줄 선물이 없다는 것. 즉 -1을 출력한다 코드 import heapq N = int(input()) stops = [] for _ in range(N): stops.append(tuple(.. 2023. 1. 16.
[Python] 백준 13904 - 과제 🧑‍💻 [Python] 백준 13904 - 과제 Gold 5 - 정렬 과제 마감일과, 과제 점수가 주어진다 하루에 한 과제를 끝낼 수 있다 즉 과제 점수 기준으로 내림차순으로 해서, 최대한 많은 점수를 얻으려고 한다 문제풀이 과제 관련 정보를 입력 받는다 그리고 일수가 있는 리스트를 만든다 이 리스트는, 어느 날에 과제를 완료했는지 확인하는 리스트다 즉 False가 있고, True로 그 날 과제를 완료했다고 표시한다 그리고 과제들을 과제 점수가 높은 과제 기준으로 내림차순으로 정렬을 한다 for문을 사용하여 과제들을 순회한다 여기서 과제를 끝내야 하는 날이 제일 기준 index가 된다 만약에 과제를 끝내야 하는 날이 False일 경우, True로 바꿔주고 answer에 과제 점수를 누적시켜준다 과제를 끝.. 2023. 1. 15.