Home [Python] 코드업 6096 : 바둑알 십자 뒤집기
Post
Cancel

[Python] 코드업 6096 : 바둑알 십자 뒤집기

Problem

https://codeup.kr/problem.php?id=6096

Solving

우선 한 줄로 들어온 값을 리스트 안에 리스트의 형태로 어떻게 저장할 지 고민했었는데 첫번째는 go[i][1], ... , go[i][19] = map(int, input().split())과 같이 모든 변수를 써서 저장하는거였고 다른 하나는 go[1] = list(map(int, input().split()))를 활용하는 것이었다. 1번 방법은 너무 번잡해서 2번을 사용했는데 왜인지 아래와 같은 에러가 발생했다.

1
2
3
4
Traceback (most recent call last):
  File "code.py", line 8, in <module>
    go[i] = list(map(int,input().split()))
IndexError: list assignment index out of range

그래서 append를 사용해 리스트를 저장하여 문제를 해결하였다.

오답 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
def turn(a):
    return int(not a)

go = [0]

for i in range(1,20):
    go.append(list(map(int,input().split())))

n = int(input())

for _ in range(n):
    x, y = map(int,input().split())
    for j in range(1,20) :
        go[j][y] = turn(go[j][y])
        go[x][j] = turn(go[x][j])

for i in range(1,20):
    for j in range(1,20):
        print(go[i][j], end=' ')
    print()

위와 같이 코드를 작성하니 입력된 좌표의 가로의 값을 변경하면서 다음과 같은 에러가 발생했다.

1
2
3
4
Traceback (most recent call last):
  File "code.py", line 15, in <module>
    go[x][j] = turn(go[x][j])
IndexError: list index out of range

해당 파일을 디버깅을 해보니 한 줄의 숫자가 입력되면서 인덱싱이 0부터 부여되는데에 반해 문제에서는 좌표가 1부터 시작하기 때문에 go[x][19]가 존재하지 않아 발생하는 문제였다. 위 문제를 해결하기 위해서는 입력된 좌표를 변경하여 처리하거나 입력할때마다 첫 값을 0으로 입력하는 방법이 있을 것 같다.

정답 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# 0과 1을 맞바꾸는 함수
def turn(a):
    return int(not a)

go = []

# 2차원 리스트 초기화
for i in range(19):
    go.append(list(map(int,input().split())))

n = int(input())

for _ in range(n):
    x, y = map(int,input().split())
    
    # x, y 좌표를 인덱스화 하기 위해 값 변경
    x -= 1
    y -= 1
    
    # 좌표의 값 변경
    for j in range(19) :
        go[j][y] = turn(go[j][y])
        go[x][j] = turn(go[x][j])

# 결과 출력
for i in range(19):
    for j in range(19):
        print(go[i][j], end=' ')
    print()

위 문제를 해결하기 위해 입력된 좌표를 각각 -1을 하였더니 오류가 해결되었다.

Memo

우선 입력된 줄을 for문을 돌며 리스트 go 안에 넣어 2차원 list로 만들었다. 그 후 입력된 좌표에 맞춰서 for문을 돌면서 위에서 정의한 turn함수를 활용해 go의 가로줄과 세로줄 모두 0은 1로, 1은 0으로 바꿔주었다. 마지막으로 완성된 go 리스트를 for문을 돌며 출력하였다.

This post is licensed under CC BY 4.0 by the author.

TIL 220211

[Python] 코드업 : 6097 : 설탕과자 뽑기