-
python 2중 배열 문제&행,열 다루기개발 이야기/알고리즘 및 코테 준비 2023. 1. 11. 14:45
#CodeUP 바둑알 십자 뒤집기 6096
https://codeup.kr/problem.php?id=6096
lst = [[0 for j in range(19)] for i in range(19)] #j column, i row #get input for i in range(len(lst)): lst[i] = list(map(bool, map(int, input().split()))) n = int(input()) for i in range(n): x, y = map(int, input().split()) x, y = x-1, y-1 for j in range(len(lst)): lst[x][j] = not lst[x][j] lst[j][y] = not lst[j][y] for i in range(len(lst)): lst[i] = list(map(int, lst[i])) for i in range(19): for j in range(19): print(lst[i][j], end=" ") print()
풀이에서 어려웠던 부분&생각해야할 부분:
1. input을 넣는 방법: 2중 list를 입력으로 받는데 이를 어떻게 넣어야할까 고민을 많이 했다.
결국 #get input에서 보이는 바와 같이 각 행을 단위로 값을 집어넣었다.
python에서 list를 2중으로 사용할 때 주의해야할 점은 바로 자료구조 형태(?)가 행이 차곡차곡 쌓인 형태이기에 특정 행을 접근한 다음, 원소에 접근한다는 것이다. 물론 numpy나 기타 import를 쓰면 더 쉽게 다룰 수 있다.
2. 0,1로 바꾸기:
모범풀이를 보면 0,1인 경우 각각의 case를 if-else처리하여 0->1, 1->0으로 바꾸어주었다. 이보다 쉽게 바꾸는 방법을 고민하다가 boolean을 이용하기로 했다. bool(0) = False, bool(1) =True 이기에 이를 이용했다.
이때 주의할 것은 바로 boolean으로 바꾸면 안된다는 것이다. 그러면 기본적으로 input은 string을 type으로 가짐으로 문자가 있으면 모두 true로 반환된다. 따라서 map을 두번 씌워 string -> int -> bool로 변환하였다.
이후 not을 이용해 바꾸어주었다.
3. 특정 행, 특정 열 바꾸기:
특정 행에는 lst[index]로 접근이 가능했지만, 특정 열에는 접근이 힘들었다.
특정 열에 접근하는 방법은 아래와 같다. 이 중 특정 행과 특정 열을 for문으로 도는 방법을 선택했다.
a = [[0, 1], [2, 3], [4, 5], [6, 7], [8, 9]] # [0 2 4 6 8]을 출력해보자 #1 for loop 사용하기 b = [] for i in a: b.append(i[0]) print(b) #2 python답게 for loop 쓰기 b = [i[0] for i in a] print(b) #3 zip 이용하기 b = list(zip(*a))[0] print(b) #pandas이용하기 import pandas as pd df = pd.DataFrame(a) df.iloc[,0] #index로 접근 #numpy로 접근 import numpy as np b = np.array(a).T[0]
'개발 이야기 > 알고리즘 및 코테 준비' 카테고리의 다른 글
[알고리즘 실습환경 구축] 알고리즘 튜토리얼 및 개요 (9) 2024.09.03 python 우선순위 que vs 힙 자료구조 (0) 2023.01.27 Python Counter와 Counter 사용 문제(백준 2108, 최빈값 찾기) (0) 2023.01.24 Python List 자료형 변경과 Sort (0) 2023.01.20 python 369를 하자 (0) 2023.01.06