기초-2차원배열] 바둑알 십자 뒤집기(설명)

 

부모님을 기다리던 영일이는 검정/흰 색 바둑알을 바둑판에 꽉 채워 깔아 놓고 놀다가...

"십(+)자 뒤집기를 해볼까?"하고 생각했다.

바둑판(19 * 19)에 흰 돌(1) 또는 검정 돌(0)이 모두 꽉 채워져 놓여있을 때,
n개의 좌표를 입력받아 십(+)자 뒤집기한 결과를 출력하는 프로그램을 작성해보자.

참고
가로 번호, 세로 번호를 사용할 수 있는 2차원 배열을 사용하면
이러한 형태를 쉽게 기록하고 사용할 수 있다. 물론 더 확장한 n차원 배열도 만들 수 있다.

 

입력

바둑알이 깔려 있는 상황이 19 * 19 크기의 정수값으로 입력된다.
십자 뒤집기 횟수(n)가 입력된다.
십자 뒤집기 좌표가 횟수(n) 만큼 입력된다. 단, n은 10이하의 자연수이다.

출력

십자 뒤집기 결과를 출력한다.


입력 예시

0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0

1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1

0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0

1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1

0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0

2

10 10

12 12

 

출력 예시

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

 

풀이

 

board = 19
baduk_board = [[0 for i in range(board)] for j in range(board)]

for i in range(board):

    temp = list(map(int, input().split()))
    
    for j in range(board):
        baduk_board[i][j] = temp[j]

count = int(input())

for i in range(count):

    x, y = map(int, input().split())

    for j in range(board):
    
        if (baduk_board[(x - 1)][j] == 0):
            baduk_board[(x - 1)][j] = 1

        else:
            baduk_board[(x - 1)][j] = 0

        if (baduk_board[j][(y - 1)] == 0):
            baduk_board[j][(y - 1)] = 1

        else:
            baduk_board[j][(y - 1)] = 0


for width in baduk_board:

    for status in width:
        print(status, end = " ")
        
    print("")

 

설명

전에는 Jupyter Notebook으로 풀었는데 이번에는 입력이 많아서 Atom을 활용했습니다.

 

먼저 바둑판의 크기를 변수로 선언해주고, 2차원 배열을 변수를 활용하여 만들어 줍니다.

 

입력 받는 한 줄의 요소들을 리스트로 만들어서 받아줍니다. temp로 받은 이유는 입력을 받고

 

바로 바둑판으로 넘길 거라서 임시적인 의미에서 temp로 했습니다.

 

for문을 활용하여 temp에 있는 값들을 baduk_board에 옮겨줍니다.

 

좌표를 입력할 횟수를 count로 받고

for문에 활용합니다.

 

좌표를 x, y로 받아주고 for문을 활용하여 위치에 있는 값이 0 이면 1로 1이면 0으로 바꿔줍니다.

 

조건에 맞게 바둑판을 출력해줍니다.

'Algorithms > Code Up 100제' 카테고리의 다른 글

Code Up 기초 100제 - 1099  (0) 2020.01.14
Code Up 기초 100제 - 1098  (0) 2020.01.14
Code Up 기초 100제 - 1096  (0) 2020.01.14
Code Up 기초 100제 - 1095  (0) 2020.01.14
Code Up 기초 100제 - 1094  (0) 2020.01.14

[기초-2차원배열] 바둑판에 흰 돌 놓기(설명)

 

기숙사 생활을 하는 학교에서 어떤 금요일(전원 귀가일)에는 모두 집으로 귀가를 한다.

오랜만에 집에 간 영일이는 아버지와 함께 두던 매우 큰 오목에 대해서 생각해 보다가
"바둑판에 돌을 올린 것을 프로그래밍 할 수 있을까?"하고 생각하였다.

바둑판(19 * 19)에 n개의 흰 돌을 놓는다고 할 때,
n개의 흰 돌이 놓인 위치를 출력하는 프로그램을 작성해보자.


참고
가로번호, 세로번호를 사용할 수 있는 2차원 배열을 사용하면
이러한 형태를 쉽게 기록하고 사용할 수 있다. 물론 더 확장한 n차원 배열도 만들 수 있다.

 

풀이

 

width = 19
height = 19
count = int(input())
baduk_board = [[0 for i in range(width)] for j in range(height)]

for i in range(count):
    x, y = map(int, input().split())
    baduk_board[(x-1)][(y-1)] = 1
    
for width in baduk_board:
    for status in width:
        print(status, end = " ")
    print("")

 

설명

 

바둑판의 가로와 세로축을 저장할 변수를 선언해준다.

흰 돌의 갯수를 입력받는다.

0으로 가득채운 2차원배열을 선언한다.

for문을 활용하여 흰돌을 놓을 좌표를 입력받고 그 좌표에 각각 -1번째에 해당하는 곳을 1을 바꿔줌으로써 흰돌을 표시한다.

리스트는 0부터 시작하기 때문에 -1을 해준다.

조건에 맞게 출력하기 위해 이중 for문과 print문을 활용하였다.

'Algorithms > Code Up 100제' 카테고리의 다른 글

Code Up 기초 100제 - 1098  (0) 2020.01.14
Code Up 기초 100제 - 1097  (0) 2020.01.14
Code Up 기초 100제 - 1095  (0) 2020.01.14
Code Up 기초 100제 - 1094  (0) 2020.01.14
Code Up 기초 100제 - 1093  (0) 2020.01.14

[기초-1차원배열] 이상한 출석 번호 부르기3(설명)

 

정보 선생님은 오늘도 이상한 출석을 부른다.

영일이는 오늘도 다른 생각을 해보았다.
출석 번호를 다 부르지는 않은 것 같은데... 가장 빠른 번호가 뭐였지?

출석 번호를 n번 무작위로 불렀을 때, 가장 빠른 번호를 출력해 보자.


참고
배열에 순서대로 기록해 두면, 기록된 내용을 모두 검사해 가장 작은 값을 찾아내면 된다.

그런데, 가장 작은 값은 어떻게 어떤 것과 비교하고 찾아야 할까?

입력

번호를 부른 횟수(n, 1 ~ 10000)가 첫 줄에 입력된다.
n개의 랜덤 번호(k, 1 ~ 23)가 두 번째 줄에 공백을 사이에 두고 순서대로 입력된다.

출력

출석을 부른 번호 중에 가장 빠른 번호를 1개만 출력한다.

입력 예시

10

10 4 2 3 6 6 7 9 8 5

 

출력 예시

2

 

풀이

 

count = int(input())
attend_number = list(map(int, input().split()))

print(min(attend_number))

 

풀이

출석을 부를 횟수를 변수로 번호를 리스트로 받아 준 뒤에

리스트에 있는 최솟값을 출력해준다.

'Algorithms > Code Up 100제' 카테고리의 다른 글

Code Up 기초 100제 - 1097  (0) 2020.01.14
Code Up 기초 100제 - 1096  (0) 2020.01.14
Code Up 기초 100제 - 1094  (0) 2020.01.14
Code Up 기초 100제 - 1093  (0) 2020.01.14
Code Up 기초 100제 - 1092  (0) 2020.01.13