2022.06.21.
백준알고리즘 6~10단계 문제 피드백
(문제 - 단계별로 풀어보기 - 각 단계별 가장 정답 비율이 낮은 문제 풀기)
6단계 문제: 1157번. 단어 공부
A = input()
B = {}
for i in range(len(A)):
X = A[i].upper()
if X in B:
B[X] = B[X] + 1
else:
B[X] = 1
max_str = ''
max = 0
for key, val in B.items():
if val > max:
max_str = key
max = val
elif val == max:
max_str = '?'
print(max_str)
더 간단한 코드 (1)
A, B = input().lower(), []
for i in range(97, 123):
B.append(A.count(chr(i)))
print('?' if B.count(max(B)) > 1 else chr(B.index(max(B)) + 97).upper())
더 간단한 코드 (2)
A = input().upper()
B = []
alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
for i in alphabet:
B.append(A.count(i))
if B.count(max(B)) > 1:
print("?")
else:
print(alphabet[B.index(max(B))])
전체 글자에 대해 'A, B, C, ...' 하나씩 수를 세어본 후
가장 큰 값을 출력하는 것이 더 빠름
7단계 문제: 1712번. 손익분기점
base, produce, sell = map(int, input().split())
diff = sell - produce
if diff <= 0:
print(-1)
else:
print(int(base/diff)+1)
8단계 문제: 1002번. 터렛
import sys
case = int(sys.stdin.readline())
for i in range(case):
x1, y1, r1, x2, y2, r2 = map(int, sys.stdin.readline().split())
if x1 == x2 and y1 == y2:
if r1 == r2:
print(-1)
else:
print(0)
else:
distance_xy = ((x2-x1)**2 + (y2-y1)**2)**0.5
sum_r = r1 + r2
if distance_xy < abs(r2 - r1):
print(0)
elif distance_xy == abs(r2 - r1):
print(1)
elif distance_xy > sum_r:
print(0)
elif distance_xy == sum_r:
print(1)
elif distance_xy < sum_r:
print(2)
9단계 문제: 11729번. 하노이 탑 이동 순서
N = int(input())
K = [] # 이동 순서를 담을 리스트
# base: 시작점, goal: 목표점, support: 목표로 가기 위해 도와주는 점
def move(base, goal, support, stage, K):
if stage == 1:
K.extend([base, goal])
else:
K.extend([base, goal]) # K단계(K번째로 큰) 원판 이동
# K-1개의 원판 탑 전체를 support(현재 원판 탑의 위치)에서
# goal(K단계 원판이 있는 위치)로 이동하는 작업
for i in range(stage - 1):
curr_stage = i + 1
if ((stage - 1) - curr_stage) % 2 == 0:
move(support, goal, base, curr_stage, K)
else:
move(support, base, goal, curr_stage, K)
for i in range(N):
stage = i + 1
if (N - stage) % 2 == 0:
move(1, 3, 2, stage, K)
else:
move(1, 2, 3, stage, K)
print(int(len(K)/2))
for i in range(int(len(K)/2)):
print(K[2*i], K[2*i+1])
더 간단한 코드
N = int(input())
cache = {}
def move(base, goal, support, stage):
if stage == 1:
return f'{base} {goal}\n'
if (base, goal, support, stage) in cache:
return cache[(base, goal, support, stage)]
else:
curr = [move(base, support, goal, stage - 1),
f'{base} {goal}\n',
move(support, goal, base, stage - 1)]
cache[(base, goal, support, stage)] = ''.join(curr)
return cache[(base, goal, support, stage)]
print(2**N - 1)
print(move(1, 3, 2, N))
시작점, 목표점, 단계가 모두 같은 case를 cache에 저장한 후 꺼내어 사용
10단계 문제: 2231번. 분해합
N = input()
length = len(N)
N = int(N)
exist = 0
if length == 1:
if N % 2 == 0:
print(int(N / 2))
exist = 1
elif N <= 18:
for i in range(1, N):
sum = i + i // 10 + i % 10
if sum == N:
print(i)
exist = 1
break
else:
for i in range(N - length*9, N):
sum = i
for j in range(length):
sum = sum + (i // (10 ** (length - j - 1)) % 10)
if sum == N:
print(i)
exist = 1
break
if exist == 0:
print(0)
'코딩테스트' 카테고리의 다른 글
[코딩테스트, Python] 프로그래머스 '소수 만들기' 문제 피드백 (0) | 2022.06.25 |
---|---|
[코딩테스트, Python] 프로그래머스 '완주하지 못한 선수' 문제 피드백 (Feat. Hash Table) (0) | 2022.06.24 |
[코딩테스트, Python] 프로그래머스 '신규 아이디 추천' 문제 피드백 (0) | 2022.06.24 |
[코딩테스트, Python] 프로그래머스 '신고 결과 받기' 문제 피드백 (0) | 2022.06.23 |
[코딩테스트 - Python] 백준알고리즘 1~5단계 문제 피드백 (0) | 2022.06.21 |