728x90
단계 | 문제 번호 | 제목 | 내 코드 | 코드 비교 |
1 | 2745 | 진법 변환 | NOTATION = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ' num,n = input().split() n = int(n) sum = 0 for i in range(len(num)): change_num = int(NOTATION.index(num[i])) new_idx = len(num)-1-i sum += change_num * (n ** new_idx) print(sum) |
num,n = input().split() print(int(num, int(n))) |
int(숫자, 진수)로 간단하게 10진수로 나타낼 수 있다. 문자열은 인덱스로 값을 바꿀 수 없다!! 그리고 런타임에러는 type이 정수가 아닌데 계산할 때 발생할 수 있으니 항상 타입에 유의하자!! |
||||
2 | 11005 | 진법 변환 2 | NOTATION = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ' num, n = input().split() num, n = int(num), int(n) st = '' while(num > 0): try: st += NOTATION[num % n] num = num // n except: break st = st[::-1] print(st) |
|
세상에.. input 값들을 int()처리 안해줘서 런타임에러 난 것이었다. | ||||
3 | 2720 | 세탁소 사장 동혁 | quarter = 25 dime = 10 nickel = 5 penny = 1 n = int(input()) for i in range(n): exchange = int(input()) q_num = exchange // quarter d_num = (exchange % quarter) // dime n_num = (exchange % quarter % dime) // nickel p_num = (exchange % quarter % dime % nickel) // penny print(q_num, d_num, n_num, p_num) |
|
4 | 2903 | 중앙 이동 알고리즘 | f = [0 for i in range(16)] f[0] = 4 n = int(input()) for i in range(n+1): if i > 0: f[i] = int((2*(f[i-1]**0.5) -1)**2) print(f[n]) |
#(2^n + 1)^2 print((2**int(input())+1)**2) |
f = [0 for i in range(16)] 여기서 16으로 안해서 (조건 1~15) 런타임 에러 떴었다. 그리고 math.sqrt로 안해도 **0.5로 루트 계산 가능하다 n은 1부터 인데 0까지 포함시키려고 하다보니 너무 어렵게 푼것 같다.. 어떤 수의 제곱이라는 걸 확인하면, 조건을 보고 규칙을 세우자 [문제 풀 때 설계한 노트] # n =0 n=1 n=2 n=3 # 2*2 (2+1)*(2+1) (3+2)*(3+2) (5+4)*(5+4) # (sqrt(f(n-1))+sqrt(f(n-1))-1)^2 # (2sqrt(f(n-1)) -1)^2 # f(0) = 4 # f(n) = (2sqrt(f(n-1)) -1)^2 |
||||
5 | 2292 | 벌집 | n = int(input()) i = 1 last_num = 1 while(n > last_num): last_num += 6*i i += 1 print(i) |
|
[문제 풀 때 설계한 노트] # 1 마지막 수: last_num =1 지나갈 방 개수: i =1 # 2~7 last_num = last_num+6*1 / i =2 # 8~19 last_num = last_num + 6*2 / i = 3 # 20 ~37 last_num = last_num + 6*3 / i = 4 |
||||
6 | 1193 | 분수찾기 | n = int(input()) i = 1 last_num = 1 while(n > last_num): i += 1 last_num = last_num + i n2 = last_num - n if (i%2!=0): print(f'{n2+1}/{i-n2}') else: print(f'{i-n2}/{n2+1}') |
|
[문제 풀 때 설계한 노트] # 1. 대각선 몇 번째(i)인지 # last_num= 1 /i = 1 # last_num= 1+2 /i = 2 # last_num= 1+2+3 /i = 3 # 2. i 가 짝수 일때 분수 (홀수면 반대) # 0 -> 1/i # 1 -> 2/i-1 # 4 -> 5/i-4 # n2 -> n2+1 / i-n2 |
||||
7 | 2869 | 달팽이는 올라가고 싶다 | #시간 초과 a,b,v = map(int,input().split()) i = 0 last = 0 while(v > last ): i += 1 last += a if(v <=last): break last -= b print(i) |
import math a,b,v = map(int,input().split()) day = (v-b)/(a-b) print(math.ceil(day)) |
시간 초과 -> 반복문으로 풀지 말것 도달하는 날을 x일이라고 했을 때, 총 올라가는 횟수는 x번, 내려오는 횟수는 (x-1)번이 될 것이다. 이를 바탕으로 식을 세워보면 Ax - B(x-1) = V 가 될 것이고, 이를 x에 대한 식으로 정리한다면 x = (V-B)/(A-B) 가 될 것이다. |
||||
8 | 10757 | 큰 수 A+B | A, B = map(int, input().split()) print(A+B) |
|
파이썬은 큰수의 덧셈도 상관 없다. |
728x90
'코딩테스트 > 백준) 단계별로 풀기' 카테고리의 다른 글
백준- 단계별로 풀어보기| 10단계- 기하: 직사각형과 삼각형 (0) | 2023.04.13 |
---|---|
백준- 단계별로 풀어보기| 9단계- 약수, 배수와 소수 (0) | 2023.04.13 |
백준- 단계별로 풀어보기| 7단계- 2차원 배열 (0) | 2023.04.04 |
백준- 단계별로 풀어보기| 6단계- 심화 1 (0) | 2023.04.01 |
코딩테스트 - 파이썬 (0) | 2023.03.30 |