[빡공팟 5기] | 코드업 | 6096 : [기초-리스트] 바둑알 십자 뒤집기(py)

2022. 9. 25. 03:36·Programming Language/PYTHON

더보기

문제 링크 : https://codeup.kr/problem.php?id=6096&rid=0 

 

[기초-리스트] 바둑알 십자 뒤집기(py)

python언어기초100제v1.0 : @컴퓨터과학사랑, 전국 정보(컴퓨터)교사 커뮤니티/연구회 - 학교 정보(컴퓨터)선생님들과 함께 수업/방과후학습/동아리활동 등을 통해 재미있게 배워보세요. - 모든 내용

codeup.kr


📋 문제 설명

바둑판(19 * 19)에 흰 돌(1) 또는 검정 돌(0)이 모두 꽉 채워져 놓여있을 때, 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

 

 

 

✏️ 풀이과정

d = [[0 for j in range(19)] for i in range(19)]  #바둑알이 들어갈 배열 생성

for i in range(19) :
    d[i] = input().split()
    for j in range(19) :
        d[i][j] = int(d[i][j])  #바둑알 입력 받기

n = int(input())  #십자 뒤집기 횟수 입력
xy = [[0 for j in range(2)] for i in range(n)] #십자 뒤집기 좌표가 들어갈 배열 생성

for i in range(n) :
    xy[i]= input().split()  #좌표 입력
    for j in range(2) :
        xy[i][j]= int(xy[i][j])-1 #좌표를 정수로 바꿔주고, 인덱스값에 맞게 -1을 해줌

for i in xy :
    for j in range(19) :
        d[i[0]][j] =  int(not d[i[0]][j])
        d[j][i[1]] = int(not d[j][i[1]])  #바둑알은 0과 1로만 이루어져 있으므로 not을 통해 바꿔줌
        
for i in range(19): 
    for j in range(19):
        print(d[i][j], end = " ")
    print()  #출력

문제를 처음 읽었을 때,

"입력받은 좌표를 제외한 가로줄과 세로줄의 색이 모두 반대로 바뀐다."

라는 말 때문에 어렵게 생각할 뻔 했지만 잘 생각해보면

그 좌표에 있는 바둑알을 가로로 1번, 세로로 1번 뒤집게 된다.

만약 좌표의 바둑알이 0이었다면

0 (초기 상태) ➡ 1 ➡ 0

이렇게 다시 원상복귀가 된다. 따라서 가로, 세로를 뒤집어주는 방식을 택한다면, 생각하지 않아도 되는 조건이다.

 

내가 이 문제를 풀면서 생각을 했던 점들은

  1. 0과 1을 어떻게 바꿔줄 것인가?
  2. 바둑알과 좌표들을 어떻게 입력 받아줄 것인가?

정도가 될 것 같다.

 

1번의 경우에는 if문으로 바둑알이 0인지 1인지 검사를 하는 방법과, bool값이나 아니면 나처럼 not을 쓰는 방법도 있다.

하지만 if문을 쓰게 되면 코드가 더 길어지고, 복잡해지기 때문에 이전 문제에서 풀면서 알 수 있었던 not을 사용했다.

(bool 보다도 not 이 먼저 생각이 났다. 그래서 not을 택했다.)

 

이 문제의 알고리즘에 할애한 시간보다 실수들에 시간을 많이 쏟아부은 것 같다.

특히 좌표가 [10, 10]이 주어졌다고 이 값을 바로 인덱싱에 사용하면 안 되는 점을 마지막에 깨달았다.

 

인덱싱을 많이 할 수 있는 문제였기도 한 것 같다. 괄호 때문에 눈이 아팠다. ㅋㅋㅋ

문제를 다 풀고, 묻고 답하기에 "파이썬 입력 팁"이라는 게시글이 있어 들어가 확인해 보았다.

항상 공백을 두고 주어지는 입력값은 input().split()을 해준 뒤, 따로 int형으로 변경해주어야 해서 번거로웠다. (불편ㅋ)

그래서 int(input().split())도 시도를 해보았는데, 오류가 발생하였다.

이 게시글에서는 공백이 들어간 입력을 받을 때 한 번에 정수형으로 형 변환을 해주는 방법을 담고 있었다.

 

🔽 공백이 포함된 입력 받는 방법

n = list(map(int, input().split()))

위와 같이 맵핑을 이용하면 가능하였다. 맵핑의 기능에 대해 찾아 공부해보는 것도 좋을 것 같다.

저작자표시 비영리 (새창열림)

'Programming Language > PYTHON' 카테고리의 다른 글

[빡공팟 5기] 6098 : [기초-리스트] 성실한 개미(py)  (0) 2022.09.28
[빡공팟 5기] 6097 : [기초-리스트] 설탕과자 뽑기(py)  (0) 2022.09.28
[빡공팟 5기] | 코드업 | 6095 : [기초-리스트] 바둑판에 흰 돌 놓기(설명)(py)  (1) 2022.09.23
[빡공팟 5기] | 코드업 | 6088 : [기초-종합] 수 나열하기1(py)  (1) 2022.09.22
[자료구조] - Python으로 스택 간단 구현하기  (0) 2022.08.27
'Programming Language/PYTHON' 카테고리의 다른 글
  • [빡공팟 5기] 6098 : [기초-리스트] 성실한 개미(py)
  • [빡공팟 5기] 6097 : [기초-리스트] 설탕과자 뽑기(py)
  • [빡공팟 5기] | 코드업 | 6095 : [기초-리스트] 바둑판에 흰 돌 놓기(설명)(py)
  • [빡공팟 5기] | 코드업 | 6088 : [기초-종합] 수 나열하기1(py)
602zzang
602zzang
  • 602zzang
    yks_STUDY
    602zzang
  • 전체
    오늘
    어제
    • 분류 전체보기 (77)
      • Programming Language (36)
        • C (15)
        • PYTHON (9)
        • RUST (12)
      • Reverse Engineering (3)
      • OS (17)
        • LINUX (17)
      • 보안 이슈 (6)
      • Digital Forensics (1)
      • CTF (8)
      • 기타 (6)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    picoCTF
    cyberdefenders
    보안동향
    P4C
    rust
    c
    코드업
    소켓 통신
    python
    드림핵
    파이썬
    백준
    공급망
    rustling
    TeamH4C
    빡공팟
    bandit
    Rocky Linux
    보안이슈
    umassctf2025
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
602zzang
[빡공팟 5기] | 코드업 | 6096 : [기초-리스트] 바둑알 십자 뒤집기(py)
상단으로

티스토리툴바