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++을 배웠으면 좋았을텐데... 예제가 다 돌아가는데도 정답이 안 뜨는 이유는 틀려서가 아니라 제출한 사람도 정답인 사람도 적어서 정답 케이스도 적은게 아닐까요...
'코딩테스트' 카테고리의 다른 글
[Python] 백준 18110번 - 'solved.ac' 풀이 (2) | 2023.01.20 |
---|---|
[Python] 백준 1337번 - '올바른 배열' 풀이 (2) | 2023.01.20 |
[Python] 백준 14936번 - '엘레베이터 장난' (2) | 2023.01.19 |
[Python] 백준 12873번 - '기념품' 풀이 (3) | 2023.01.18 |
[Python] 백준 1049번 - '기타줄' 풀이 (2) | 2023.01.18 |