탐욕법(5)
-
볼링공 고르기 코드 및 해설 (파이썬)
출처: 이것이 취업을 위한 코딩 테스트다 with 파이썬, Q 5, p 315 먼저 무게에 상관없이 두 사람이 볼링공을 고르는 경우의 수를 구해 total에 저장합니다. 이는 nC2와 같으므로 n * (n-1) / 2로 구현합니다. 이후 같은 무게의 공이 2개 이상인 공들을 확인하며, 이 두개를 두 사람이 고를 경우의 수를 구해 duplicates에 저장합니다. total에서 duplicates를 뺀 값을 최종 정답으로 반환합니다. import sys # N: 공의 개수, M: 무게의 범위 N, M = map(int, sys.stdin.readline().split()) balls = list(map(int, sys.stdin.readline().split())) # nC2 total = N * (N-1..
2021.08.16 -
만들 수 없는 금액 코드 및 해설 (파이썬)
출처: 이것이 취업을 위한 코딩 테스트다 with 파이썬, Q 4, p 314 먼저 주어진 동전으로 만들 수 있는 모든 금액을 구한 후, 이중 불연속인 구간을 찾아 만들 수 없는 금액의 최솟값을 구합니다. 만들 수 있는 모든 금액을 구할 때는 possible_amount라는 함수를 만들어 사용했습니다. 오름차순으로 정렬된 동전의 리스트가 입력으로 주어지면, 첫 번째 두 개의 동전과 그 두 개의 동전의 합으로 이루어진 집합을 만듭니다. 이후 세 번째 동전부터 모든 동전을 하나씩 살피면서 지금까지 만들어진 집합 amounts의 모든 값에 현재 동전의 값을 더한 값을 집합에 추가합니다. 이후 amounts 집합을 리스트로 변환해 반환합니다. 이렇게 얻은 만들 수 있는 모든 금액 중에서 1이 없으면 정답으로 1..
2021.08.16 -
백준 뒤집기 코드 및 해설 (파이썬)
https://www.acmicpc.net/problem/1439 1439번: 뒤집기 다솜이는 0과 1로만 이루어진 문자열 S를 가지고 있다. 다솜이는 이 문자열 S에 있는 모든 숫자를 전부 같게 만들려고 한다. 다솜이가 할 수 있는 행동은 S에서 연속된 하나 이상의 숫자를 잡고 모 www.acmicpc.net 입력으로 주어진 스트링 s에서 연속된 중복을 없앤 스트링인 x를 구합니다. 예를 들어, 000110000는 010이 됩니다. 이후 x에서 0의 개수와 1의 개수 중 더 작은 것을 정답으로 반환합니다. import sys s = sys.stdin.readline() # s에서 연속된 중복을 없앤 string x = s[0] for i in range(len(s)): if i == 0 or s[i] ..
2021.08.16 -
곱하기 혹은 더하기 코드 및 해설 (파이썬)
출처: 이것이 취업을 위한 코딩 테스트다 with 파이썬, Q 2, p 312 0과 1이 포함된 연산은 더하기, 그 외의 숫자들은 모두 곱하기로 처리합니다. 숫자들의 리스트를 deque로 만든 후, 순서대로 숫자를 하나씩 pop합니다. 숫자가 남아있을 때까지 다음을 반복합니다. 이전 혹은 현재 숫자가 0 또는 1이면 이전 숫자와 현재 숫자를 더한 값을 이전 숫자로 설정합니다. 그 외는 이전 숫자와 현재 숫자를 곱한 값을 이전 숫자로 설정합니다. 반복이 끝난 후 이전 숫자를 반환합니다. import sys from collections import deque # 0과 1은 더하기, 나머지 수는 곱하기로 처리해야 함 s = [int(num) for num in sys.stdin.readline()] s = ..
2021.08.16 -
모험가 길드 코드 및 해설 (파이썬)
출처: 이것이 취업을 위한 코딩 테스트다 with 파이썬, Q 1, p 311 그룹의 개수를 저장할 변수인 count를 0으로 초기화합니다. 모험가들의 공포도 리스트를 내림차순으로 정렬하고, 이 중 첫 요소를 꺼내 현재 공포도의 최댓값을 구합니다. 공포도 리스트의 길이가 현재 공포도의 최댓값보다 짧으면 더 이상 그룹을 형성할 수 없어 while문을 탈출하고, 그렇지 않으면 공포도의 최댓값만큼 공포도 리스트의 요소를 삭제합니다. 이는 그룹 하나를 형성했다는 의미이므로 count 값을 하나 증가시킵니다. 마지막으로 count를 반환합니다. import sys # 모험가 수 N = int(sys.stdin.readline()) # 공포도 리스트 scared = list(map(int, sys.stdin.rea..
2021.08.16