정화 코딩
매일 문제 풀기 - 8월 둘째 주 본문
8/7. ACM 호텔 (백준 10250번)
https://www.acmicpc.net/problem/10250
#python
count = 0
countNum = int(input())
while count < countNum :
count += 1
h, w, n = map(int, input().split(" "))
yy = n % h
xx = n // h
if yy == 0 :
yy = h
else :
xx += 1
print(100*yy + xx)
# print(yy, end = "")
# print(format(xx, '02'))
# 또는 print('{0:02d}'.format(xx))
에 진짜 어이없어 내가 이 브론즈3 때문에 한시간 넘게 고생하다니.. 하 처음에는 n % h == 0 인 경우를 생각하지 못해서 틀렸다. (오답) 근데 여기까지는 10분도 채 안 걸림. 근데 이 이후부터 문제였는데, 첫번째 문제. 그냥 100*yy + xx 이렇게 출력하면 자리수 채우는거 생각 안 해도 되고 완전 쉬운데 나는 그 쉬운 길을 놔두고 굳이굳이 돌아갔다. 그냥 멍청이인거지... yy랑 xx를 당연히 따로 출력해야 된다고 생각하고 xx의 자리수를 2가 되게끔 0으로 채우는 방법을 검색하면서 찾았고 그렇게 제대로 완성한 듯 했다. 근데 또 틀림. (오답) 내 로직에 문제가 있는 줄 알고 질문게시판에 있는 반례들을 뒤져가며 돌려봤는데 다 맞게 나옴... 근데 이때 100*yy + xx 로 출력하고 해결했다는 글을 발견. 설마? 하고 그렇게 제출해봤는데 바로 맞음. (정답) 하... 내가 추측한 바로는 내가 숫자랑 문자랑 혼용해서 출력한게 문제가 된 것 같은데... (format(xx, '02')의 반환값이 문자임.) 정답 판정할 때 그런 것까지 원해 고려되는 거였나..???? 모르겠다. 아직도 미스테리임.
+) 나중에 알게 된 사실... 저거 제출할 때 내가 뭔가 잘 못 했나보다. 아니면 다른 버전을 제출했거나. 암튼 다시 yy와 xx 따로 출력하는 방식으로 다시 제출해보니 정답 뜸...
8/7. X보다 작은 수 (백준 10871번)
https://www.acmicpc.net/problem/10871
#python
n, x = map(int, input().split(" "))
data = list(map(int, input().split(" ")))
for i in range (0, n) :
if data[i] < x :
print(data[i], end = " ")
(정답)
8/7. A×B (백준 10998번)
https://www.acmicpc.net/problem/10998
#python
a, b = map(int, input().split(" "))
print(a*b)
(정답) 이로써 class 1++도 달성 완료!!
8/9. 단어 정렬 (백준 1181번)
https://www.acmicpc.net/problem/1181
#python
import sys
n = int(input())
word = [""] * n
for i in range (0, n) :
word[i] = sys.stdin.readline().strip()
data = list(set(word))
for i in range (1, 51) :
temp = []
for j in range (0, len(data)) :
if len(data[j]) == i :
temp.append(data[j])
temp.sort()
for k in range (0, len(temp)) :
print(temp[k])
input()과 sys.stdin.readline()의 차이점. input()은 맨 뒤에 \n 없이 입력을 받고, sys.stdin.readline()는 맨 뒤에 \n를 포함하여 입력을 받는다. sys.stdin.readline()가 더 빠르기 때문에 문제를 풀 때는 주로 이것을 사용하는데, 이 방법을 사용하면서도 개행 문자 없이 입력을 받고 싶다면 sys.stdin.readline().strip()를 사용하면 된다. data = list(set(word))은 중복되는 원소를 제거하는 역할을 한다. 문자열의 길이는 1~50이라는 것을 알기 때문에 길이별로 반복을 돌린다. 길이가 같은 문자열들은 새로운 리스트에 넣어놓고 sort()를 통해 정렬을 하고 한 줄씩 출력한다. (참고! 문자열을 원소로 하는 리스트를 만드는 것은 다른 것들과 다를 것이 없다. 그냥 문자열을 원소로 하게 선언하거나 나중에 추가 등을 하면 된다. 만약 두번째 문자열의 세번째 문자에 접근하고 싶다면 data[1][2]라고 하면 된다. 문자열은 문자의 리스트라고 생각할 수 있으니까.) (정답)
8/10. 체스판 다시 칠하기 (백준 1018번)
https://www.acmicpc.net/problem/1018
#python
import sys
n, m = map(int, input().split(" "))
board = []
for i in range (0, n) :
board.append(sys.stdin.readline().strip())
chess = [""] * 8
min = n * m
for i in range (0, n-7) :
for j in range (0, m-7) :
count = 0
for k in range (0, 8) :
chess[k] = board[i+k][j:j+8]
for l in range (0, 8) :
if (k+l) % 2 == 0 :
if chess[k][l] == 'W' :
count += 1
else :
if chess[k][l] == 'B' :
count += 1
if count > (64 - count) :
count = 64 - count
if count < min :
min = count
print(min)
이렇게 모든 경우 하나하나 체크해가면서 푸는게 맞나 싶지만... 알고리즘 분류에 브루트포스 알고리즘이라고 적혀있으니 맞는 것 같기도? (정답)
'PS' 카테고리의 다른 글
매일 문제 풀기 - 8월 넷째 주 (0) | 2023.08.22 |
---|---|
매일 문제 풀기 - 8월 셋째 주 (0) | 2023.08.15 |
매일 문제 풀기 - 8월 첫째 주 (0) | 2023.08.01 |
매일 문제 풀기 - 7월 다섯째 주 (0) | 2023.07.26 |
매일 문제 풀기 - 7월 넷째 주 (0) | 2023.07.18 |