Programming/Python

코드업 6095 바둑판에 흰돌놓기 - 파이썬 (Python)

심코딩 2022. 4. 29. 20:20

오늘은 제가 예전에 공부를 하면서 많이 풀었었던 코드업 문제중에 한개를 한번 포스팅 해보려 합니다!

코드업은 정말 파이썬 기본을 배우신 분들이 문제풀어보길 원하신다면 정말 강력추천드리는 웹사이트 입니다.

 

https://codeup.kr/

 

CodeUp

☆ 파이썬 다운로드 : 파이썬3 ☆ 무료 C언어 IDE : Code::blocks       DEV C++ ☆ 추천 온라인 IDE : C   C++11   Python3   Java ☆ 채점 가능 언어 : C, C++, JAVA, Python 3.5 ★ C++로 제출시 void main()을 사용하면

codeup.kr


문제와 입력 예시 입니다. 항상 코딩 문제를 해결하는데는 문제를 정말정말 꼼꼼히 읽어봐야 하더라구요!

 

위 말을 요약하자면, 행과 열이 19x19인 바둑판에서 흰돌을 몇개를 놓을지를 고르고, (x,y) 좌표를 입력하면 그 좌표에만 흰돌(숫자1)이 놓여지고, 그 외의 좌표에는 검은돌 (숫자0)이 놓아진다는 것이다.

 


정답 코드는 아래와 같다.

d = []             

for i in range(19): 
    d.append([]) 
    for j in range(19): 
        d[i].append(0)

n = int(input("돌 숫자: "))
for i in range(n):
    x, y = map(int,input().split())
    d[x][y] = 1 


for i in range (0,19): 
    for j in range (0,19): 
        print(d[i][j], end =' ') 
    print()

이 문제는 List Comprehension 관련 문제라고 하는데, 보통 바둑판을 만든다던지 2차원으로 된 데이터 배열을 만들 때에는 좌표 문제와 같이 매개변수를 두개 만들어야 한다면 리스트 안에 리스트를 넣어 테이블을 만든 다음 그것을 이중 반복문을 통해 출력을 한다.

 

한번 코드 하나하나 분석해보도록 하자.

 

d = []             

for i in range(19): 
    d.append([]) 
    for j in range(19): 
        d[i].append(0)

일단 d라고 하는 빈 리스트를 만든다.

리스트 d에 작은 리스트 19개를 넣는다. 즉 현재 큰 리스트 (d)안에 작은 비어있는 리스트가 19개가 들어가있다.

또 그 작은 리스트 안에 0을 모두 넣는다.

 

즉, d라는 리스트 안에는 현재 0이 19개가 들어있는 리스트가 19개 들어있는 것이다.

[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] 이 19개가 들어있는 것이다.

 

n = int(input("돌 숫자: "))
for i in range(n):
    x, y = map(int,input().split())
    d[x][y] = 1

흰돌을 놓을 갯수를 n 으로 인풋

흰돌을 놓을 좌표를 map으로 인풋 (당연히 흰돌의 갯수만큼 반복)

 

그 다음, 위에만든 d리스트에서 x,y 좌표가 찍힌 곳은 1로 만든다.

 

d[x][y] 부분이 잘 이해안될 수 있는데, 예를 들어서 d[1][2]를 입력을 했다고 하면

d에 있는 리스트중에서 두번째 리스트가 선택이 되는것이고, 그 두번째 리스트안의 세번째를 선택하는 것이다.

(* 파이썬은 숫자를 0부터 센다)

 

이제 선택된 (x,y) 좌표는 흰돌을 놓는 곳이고 1로 표시 될 것이다.

 

for i in range (0,19): 
    for j in range (0,19): 
        print(d[i][j], end =' ') 
    print()

그 다음 만들어 놓은 바둑판을 이중 반복문을 통해 출력해주면 끝.