백준 14916번 - 거스름돈

백준 14916번 바로가기 나의 풀이 c = int(input()) arr = [0,2,1,3,2,1,3,2,4,3] if c == 1 or c == 3: print(-1) else: print((c//10)*2 + arr[c%10]) 고수의 풀이 n=int(input()) print((n//5+[0,2,1,3,2][n%5],-1)[n in(1,3)]) 출처 CODE REVIEW 두 자리 숫자부터는 10=5원*2로 생각해서 10마다 2씩 늘려주면된다. 따라서 거스름돈을 10으로 나눈 몫(q)과 나머지(r)에 집중해서 풀면 된다. 고수의 풀이의 경우 5로 나눈 몫과 나머지를 가지고 문제를 풀어주었다. 나머지 논리는 동일!

2023-5-22 · 1 min · 62 words · Junha

백준 1783번 - 병든 나이트

백준 1783번 바로가기 나의 풀이 y,x=map(int,input().split()) if y == 1: print(1) elif y == 2: if x > 8: print(4) else: print((x+1)//2) else: if x < 5: print(x) elif x < 7: print(4) else: print(x-2) CODE REVIEW 세로 길이에 따라 조건을 나누고, 다시 가로 길이에 따른 세부 조건을 나누어줘야하는 문제였다. 한쪽으로만 움직이는 병든 나이트라 주어진 제약사항만 잘 지키면 푸는데는 크게 어렵지 않았다.

2023-5-22 · 1 min · 62 words · Junha

백준 1343번 - 폴리오미노

백준 1343번 바로가기 나의 풀이 board = [] for i in input().split('.'): if len(i) % 2 != 0: print(-1) break if (a:=len(i))%4 == 0: board.append("AAAA"*(a//4)) elif (b:=len(i))%4 == 2: board.append("AAAA"*(b//4) + "BB") else: print(*board, sep=".") 고수의 풀이 print((s:=input().replace('X'*4,'A'*4).replace('XX','BB'),-1)['X'in s]) 출처 CODE REVIEW X의 갯수에 따라 처리를 달리 해주어야하는 문제였다. 실버 V치고는 쉬운 편에 속한다. 고수의 풀이의 논리가 신박했는데, 정리해보면 다음과 같다. XXXX가 있다면 AAAA로 바꾼다. 위의 처리 이후에 XX가 남았다면 BB로 바꾼다. 앞의 처리 이후에도 X가 남았다면 -1을 출력, 남아있는 X가 없다면 처리값을 출력한다. Greedy Algorithm에 대해 살펴보면 the locally optimal choice at each stage, 즉 현재의 최선의 수 만을 생각하는 것이다. 먼 미래의 영향을 고려하지 않고 현재 상태만을 토대로 행동을 결정하는 것이다.

2023-5-21 · 1 min · 113 words · Junha

백준 2720번 - 세탁소 사장 동혁

백준 2720번 바로가기 나의 풀이 for _ in range(int(input())): n = int(input()) ans = [] ans.append(n//25) n = n % 25 ans.append(n//10) n = n % 10 ans.append(n//5) n = n % 5 ans.append(n) print(*ans) CODE REVIEW 주어진 횟수만큼, 나머지와 몫을 구해나가는 간단한 문제였다. ans = [] list를 만들고 몫을 append 하는 방식을 택했는데 굳이 더 줄이자면 다음과 같이 바꿀 수 있다. for _ in range(int(input())): n = int(input()) print(n//25, n%25//10, n%25%10//5, n%25%10%5)

2023-5-14 · 1 min · 73 words · Junha