코딩테스트
[Python] 백준 3100번 - '국기 인식' 풀이
CuckooBird
2023. 1. 19. 19:32
https://www.acmicpc.net/problem/3100
3100번: 국기 인식
희원이는 국기 인식 시스템을 만들었다. 이 알고리즘은 국기를 6*9크기의 행렬로 필터링 시킨 뒤, 인식한다. 행렬에는 색을 나타내는 알파벳 대문자가 있다. 이 시스템은 아직 개발 초기 단계이
www.acmicpc.net
코드
정답이 안 뜨지만 예제는 잘 돌아가는 코드입니다...
정답은 https://hsin.hr/2010/index.html > School Competition 18th February 2010 > Seniors > Solutions 에서 C++코드로 확인 가능합니다.
import sys
flag = []
horiziontal_f = [[] for i in range(3)]
vertical_f = [[] for i in range(3)]
for r in range(6):
flag += list(sys.stdin.readline().rstrip().rsplit())
for c in range(9):
horiziontal_f[r//2] += flag[r][c]
vertical_f[c//3] += flag[r][c]
data_dic = dict()
row_ans = 0
col_ans = 0
for i in range(3):
for str in horiziontal_f[i]:
if str in data_dic:
data_dic[str] += 1
else:
data_dic[str] = 1
row_ans += horiziontal_f[i].count(max(data_dic, key=data_dic.get))
data_dic.clear()
for str in vertical_f[i]:
if str in data_dic:
data_dic[str] += 1
else:
data_dic[str] = 1
col_ans += vertical_f[i].count(max(data_dic, key=data_dic.get))
data_dic.clear()
print(6*9 - max(row_ans, col_ans))
이렇게 수평방향과 수직방향의 배열을 만들었습니다.
후에 딕셔너리를 이용하여 row_n, col_n에는 각각의 배열에 가장 많은 문자의 개수를 행 따로, 열 따로 누적하여 저장했습니다. 마지막에 그 중 큰 값을 6*9에 빼어 정답을 구했습니다.
후기
어렵게 찾은 정답이었지만 c++로 작성된 코드라 이해도 어렵더라고요... c++을 배웠으면 좋았을텐데... 예제가 다 돌아가는데도 정답이 안 뜨는 이유는 틀려서가 아니라 제출한 사람도 정답인 사람도 적어서 정답 케이스도 적은게 아닐까요...