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문을 돌며 출력하였다.