728x90
문제 10250. ACM 호텔
1. 나의 코드와 발상 과정 (오답)
## 오답 1.
t = int(input())
ans_list = []
for i in range(t):
h, w, n = map(int,input().split())
if n // h + 1 < 10 and n % h != 0 :
answer = str(n % h) + '0' + str(n // h + 1)
elif n // h + 1 < 10 and n % h == 0 :
answer = str(h) + '0' + str(n // h)
else :
if h == 1 and n // h + 1 < 10:
answer = str(h) + '0' + str(w)
elif h == 1 and w >= 10:
answer = str(h) + str(w)
elif n // h + 1 >= 10 or h > 9 :
answer = int(str(n % h) + str(n // h + 1))
else :
answer = int(str(n % h) + '0' + str(n // h + 1))
ans_list.append(answer)
for ans in ans_list:
print(ans)
# 오답 2.
t = int(input())
sco_list = []
for i in range(t):
h, w, n = map(int,input().split())
sco_list.append([h, w, n])
ans_list = []
r_ans_list = []
for i in range(len(sco_list)):
for j in range(sco_list[i][1]) :
for k in range(sco_list[i][0]):
if j < 9 :
ans_list.append(str(j+1) + '0' + str(k+1))
else :
ans_list.append(str(j+1) + str(k+1))
r_ans_list.append(ans_list[int(sco_list[i][2])-1])
ans_list = []
for i in range(t):
print(r_ans_list[i])
이 문제는 정말 오래 고민했지만 풀지 못한 문제이다. (반례 때문에...)
층, 호수, 몇 번째 손님인지를 고려하여 그 손님이 머무를 방의 호수를 출력하라는 문제였다.
엘리베이터 거리와 제일 가까운 방을 선호하기 때문에 각층의 xx01호부터 차게 되어있다.
만약 3층에 3호까지 있는 건물이라면
101 - 201 - 301 - 102 - 202 - 302 ... - 303
이런식으로 사람이 들어차게 된다.
그러면, n에서 h를 나눈 몫을 가지고 호수를 정할 수 있을 것이다.
그런다음 층수와 호수를 문자열로 합을 해주면 될 것이다.
그런데 여기서 나는 오답에 썼듯 많은 반례들을 가지고 씨름하고 싸우고 왔다.
그랬더니 괴물 코드가 입력되어 버렸다.
2. 고수님의 깔끔한 코딩
t = int(input())
for i in range(t):
h, w, n = map(int, input().split())
num = n//h + 1
floor = n % h
if n % h == 0:
num = n//h
floor = h
print(f'{floor*100+num}')
... 간결하게 호수를 찾으시고는 층수를 '나머지'를 활용해 찾고,
n이 h의 배수일 때, 즉 9와 3일 때,
num = n//h + 1 를 그때만 n//h으로 바꾸어주는 모습을 보인다.
....
그러고는 층수에 100을 더하고, 그냥 넘버를 붙여버리는 식의 중간 '0' 해결도 해버렸다.
대단하다.
3. 아쉬운 점
정확한 수학 구현이 되지 않아 많이 헤맨것 같다.
시간이 많이 걸리더라도 하나하나 필요한 조건들을 모두 생각해내고,
그것을 적용하는 정석적인 논리적 접근법을 더 연습해야 할 것 같다.
728x90
'Problem Solving' 카테고리의 다른 글
[백준] 2798 블랙잭 python 알고리즘 문제 (0) | 2022.04.20 |
---|---|
[백준] 2231 분해합 python 알고리즘 문제 (0) | 2022.04.20 |
[백준] 2839 설탕 배달 python 알고리즘 문제 (0) | 2022.04.18 |
[백준] 1546. 평균 python 알고리즘 (0) | 2022.04.18 |
[백준] 1267 python 알고리즘 (0) | 2022.04.18 |
댓글