[ 문제 ]
https://www.acmicpc.net/problem/2578
[ 난이도 ]
실버4
[ 필요 개념 ]
없는 듯..?
[ 풀이 ]
처음엔, 태스크를 분리시키지 않고 진행했던 것 같다. 그런데 그랬더니 내가 생각지도 못한 부분에서 에러가 생겼고.. 구조를 최대한 단순하게 잡는 것이 무엇보다 중요함을 느꼈다. 이렇게 설계하면 예외적인 상황이 안 생기겠다! 는 느낌으로 짜야하는 것 같다. 예를 들어서 지금 풀이에서처럼 아예 마킹을 딱 끝내 놓고 가로줄, 세로줄, 대각선 검사를 한다든지..!
배열의 인덱스는 0부터 시작한다는 점을 명심 또 명심..
파이썬으로 2차원 배열 만드는 법을 익혔다.
[ 소스코드 ]
bingoCounter = 0
myList = [list(map(int, input().split())) for _ in range(5)]
answerList = [list(map(int, input().split())) for _ in range(5)]
for k in range(25):
bingoCounter = 0
newList = [(i, j) for i in range(5) for j in range(5)
if myList[i][j] == answerList[k // 5][k % 5]]
#마크업
myList[newList[0][0]][newList[0][1]] = 0
# print(myList)
#가로줄 검사
for i in range(5):
rowSum = 0
for j in range(5):
rowSum += myList[i][j]
if rowSum == 0:
bingoCounter += 1
# print('bingoCounter1...'+str(bingoCounter))
#세로줄 검사
for i in range(5):
colSum = 0
for j in range(5):
colSum += myList[j][i]
# print(colSum)
if colSum == 0:
bingoCounter += 1
# print('bingoCounter2...'+str(bingoCounter))
#대각선 검사
xSum1 = 0
xSum2 = 0
for i in range(5):
for j in range(5):
if i == j:
xSum1 += myList[i][j]
if i + j == 4:
xSum2 += myList[i][j]
if xSum1 == 0:
bingoCounter += 1
if xSum2 == 0:
bingoCounter += 1
# print('bingoCounter3...'+str(bingoCounter))
# print(k)
# print(bingoCounter)
#빙고 검사
if bingoCounter > 2:
print(k+1)
break
'알고리즘' 카테고리의 다른 글
[BOJ / 12933 / Python] 오리 (1) | 2023.09.22 |
---|---|
[BOJ / 1913 / Python] 달팽이 (0) | 2023.09.20 |
[BOJ / 20546 / Python] 기적의 매매법 (0) | 2023.09.19 |
바킹독 알고리즘 0x07강 덱 요약본 (1) | 2023.01.31 |
바킹독 알고리즘 0x06강 큐 요약본 (0) | 2023.01.31 |
댓글