https://www.acmicpc.net/problem/14696
🔥 처음 작성코드 (32점)
import sys
input = sys.stdin.readline
N = int(input())
for _ in range(N):
ac = list(map(int, input().split()))
bc = list(map(int, input().split()))
acc = [0] * 4
bcc = [0] * 4
for i in range(1, ac[0]+1):
acc[ac[i]-1] += 1
for i in range(1, bc[0]+1):
bcc[bc[i]-1] += 1
na = int(''.join(str(x) for x in acc[::-1]))
nb = int(''.join(str(x) for x in bcc[::-1]))
if na > nb:
result = 'A'
elif nb > na:
result = 'B'
else:
result = 'D'
print(result)
⭕ 해설
- 문제가 너무 쉽다고 생각했다가 32점을 받았습니다...
- 일단 ac, bc 리스트에 a,b의 카드정보를 받아주었습니다.
- 그 다음 각각 별, 동그라미, 네모, 세모의 카드 수를 카운팅할 acc, bcc를 만들었습니다.
- ac와 bc에서 카드 개수정보가 들어있는 0자리를 제외하고 나머지를 돌며 acc, bcc를 늘려주었습니다.
- 그 다음 acc, bcc를 거꾸로 뒤집어 정수로 변환시켰습니다.
- 정수로 바뀐 na, nb는 각각 카드에 그려진 모양의 개수를 나타냅니다.
- 천의 자리에 별의 개수
- 백의 자리에 동그라미의 개수
- 십의 자리에 네모의 개수
- 일의 자리에 세모의 개수
- 그래서 이 두 수를 비교하여 큰 쪽이 이기고, 같을 때 비기는 것이라 생각하고 코드를 작성했습니다.
🚨 이 코드가 틀린 이유
하나의 모양이 10개 이상인 경우를 고려하지 못하였습니다.
만약 a는 카드에 별 하나가 그려져있고, b는 카드에 동그라미 열 개가 그려져있으면 경기는 a가 승리합니다.
하지만 제 코드에서는 na = 1000, nb = 1000 으로 비긴 결과를 출력하게 됩니다.
그래서 acc, bcc => na, nb 의 과정을 삭제하고, 리스트에서 원소를 하나씩 꺼내어 비교하는 코드로 변경하였습니다.
🔥 수정코드 (100점)
import sys
input = sys.stdin.readline
N = int(input())
result = []
for _ in range(N):
ac = list(map(int, input().split()))
bc = list(map(int, input().split()))
acc = [0] * 4
bcc = [0] * 4
for i in range(1, ac[0]+1):
acc[ac[i]-1] += 1
for i in range(1, bc[0]+1):
bcc[bc[i]-1] += 1
for i in range(4)[::-1]:
if acc[i] > bcc[i]:
result = 'A'
break
elif acc[i] < bcc[i]:
result = 'B'
break
else:
result = 'D'
print(result)
'Algorithm > BAEKJOON' 카테고리의 다른 글
[백준 BOJ] 2133 타일 채우기 (python) (0) | 2022.02.23 |
---|---|
[백준 BOJ] 13398 연속합 2 (python) (0) | 2022.02.18 |
[백준 BOJ] 10163 색종이 (python) (0) | 2022.02.16 |
[백준 BOJ] 9465 스티커 (python) (0) | 2022.02.16 |
[백준 BOJ] 1149 RGB거리 (python) (0) | 2022.02.16 |