백준 20044 n = int(input()) team = list(map(int, input().split())) team.sort() power = [] for i in range(len(team)//2): power.append(team[i]+team[len(team)-1-i]) print(min(power)) 오름차순으로 정렬한 뒤 첫번째 요소와 마지막 요소의 합, 두번째 요소와 마지막에서 두번째 요소의 합,,, 으로 차례차례 리스트에 넣어 최솟값을 출력했다. 2021. 3. 13. 백준 13413 T = int(input()) for i in range(T): black = 0; white = 0 n = int(input()) first = list(input()) second = list(input()) for j in range(n): if first[j] != second[j]: if first[j] == 'B': black += 1 else: white += 1 print(max(black, white)) 최소 작업의 횟수를 구해야 하므로 가능한 1번방법을 먼저 쓰고, 남은 말들을 2번방법으로 마무리 해주는게 좋다. 목표상태의 i번째 말과 초기상태의 i번째 말이 다를 경우 필요한 색깔의 말을 +1 해준다. ( 초기상태의 말은 하얀색인데 목표상태의 말은 검은색일경우 black + 1 ) 여기.. 2021. 3. 13. 백준 20937 from collections import Counter N = int(input()) ddeokguk = [i for i in map(int, input().split())] print(max(Counter(ddeokguk).values())) 처음엔 단순히 내림차순으로 정렬한 뒤 크기가 작으면 접시를 추가했는데 오류가 있었다. 코드에서는 (4,3,2) | (2,1) 로 접시가 나뉘지만 사실은 (4,3,2,1) | (2) 로 나뉘어야 하기 때문이다. 우연히 2라는 답은 똑같았지만 예시가 달라지면 답도 달라졌다. 그래서 얻은 답은 가장 많이 나왔던 크기의 접시의 개수이다. 같은 크기의 접시는 쌓을 수 없기 때문에 찢어져야 한다. 따라서 맨 밑이든 맨 위든 접시무리 하나당 무조건 하나씩 끼워져있어야 한다는.. 2021. 3. 11. 백준 2847 N = int(input()) point = [] for _ in range(N): point.append(int(input())) point.reverse() tmp = point[0] count = 0 for i in point[1:]: if tmp 2021. 3. 11. 백준 13305 N = int(input()) distance = list(map(int, input().split())) price = list(map(int, input().split())) min_price = 1000000000 # 기름을 넣을 가격(최소) result = 0 for i in range(N-1): tmp = price[i] if min_price > tmp: min_price = tmp result += distance[i] * min_price print(result) 2021. 3. 9. 백준 19939 N, K = map(int, input().split()) if N >= (K*(K+1))/2: if (N - ((K*(K+1))/2)) % K == 0: print(K-1) else: print(K) else: print(-1) 어제 차례차례 대입해보며 규칙찾는 방법을 깨달아서 바로 적용했다. 바구니에 1개씩은 무조건 들어가야 하고 공의 개수가 모두 달라야하므로, 모든 바구니에 한개씩 담고 나머지를 다르게 분배했다. 우선 나눠 담을 수 있으려면 N이 1부터 K까지의 합보다 같거나 커야한다. 따라서 N >= ((K * (K+1)) / 2) 이면 K-1이라고 단정지었는데 예외가 있었다. (N - ((K*(K+1))/2)) % K == 0 인 경우는 K-1이지만, 나누어 떨어지지 않는 경우도 있었다. 먼저 .. 2021. 3. 9. 이전 1 2 3 다음