알고리즘(algo)/코드업

[코드업] Python 기초 100제 6096~6098번

dDong2 2023. 1. 11. 12:21
참고: https://codeup.kr/problemsetsol.php

 

✔️ 코드업 파이썬 기초 100제 [6096번]

 

 

그 놈의 영일이는 또 바둑을 이상한 데에 쓰려고 한다.

 

 

문제 자체도 잘 이해를 해야하는데,

주어진 좌표의 가로를 쭉 뒤집고

세로를 쭉 뒤집는 결과에 따라서

0과 1을 뒤집어주면 된다.

 

data = [input().split() for _ in range(19)]
n = int(input())

for i in range(n):
  x, y = map(int, input().split())
  for j in range(19):
    if data[x-1][j] == '0':
      data[x-1][j] = '1'
    else:
      data[x-1][j] = '0'
    if data[j][y-1] == '1':
      data[j][y-1] = '0'
    else:
      data[j][y-1] = '1'

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

 

풀었던 코드는 다음과 같은데,

리스트 컴프리헨션으로 입력받은 것을

2차원 배열 형태로 만들어주고 x와 y를 map으로 받는다.

 

그리고 받은 좌표에 따라서 0은 1로, 1은 0으로

뒤집어서 출력하면 된다.

 

 

✔️ 코드업 파이썬 기초 100제 [6097번]

 

 

 

이번에 영일이가 뽑기를 또 바둑판 형태로

무언가를 만들어보고 싶어 한다.

 

 

해당 문제는 받은 숫자 만큼의 배열을 만들고,

가로와 세로일 때 막대의 길이를 1로 채워주는 문제다.

 

h, w = map(int, input().split())
n = int(input())

data = [[0 for _ in range(w)] for _ in range(h)]

for i in range(n):
  l, d, x, y = map(int, input().split())
  for j in range(l):
    if d == 0:
      data[x-1][(y-1)+j] = 1
    if d == 1:
      data[(x-1)+j][y-1] = 1

for i in range(h):
  for j in range(w):
    print(data[i][j], end=' ')
  print()

 

h와 w 만큼의 리스트 컴프리헨션 형태로 2차원 배열을 만들고,

받을 수 있는 값들을 map을 돌면서 받아준다.

 

문제에서는 (1, 1)부터 시작하지만

우리는 인덱스 0부터 시작해야하기 때문에

x와 y에 각각 1을 뺀 만큼의 인덱싱을 해주어야 한다.

그리고나서 출력하면 된다.

 

참고로 막대 길이만큼을 돌아야하기 때문에,

for문의 범위는 l로 설정해주면 된다.

 

 

✔️ 코드업 파이썬 기초 100제 [6098번]

 

 

코드업 파이썬 기초 100제의 마지막 문제이다.

어김없이 영일이가 바둑판 형태의 미로 상자를 가져왔다.

 

 

글보다는 입력과 출력 예시를 살펴보면 쉬운데,

가장자리는 1로 벽이 세워져있고

중간에 1로 막힌 부분은 갈 수 없다.

 

가로가 1로 막혀있다면 아래로,

막혀있지 않다면 9로 채워주게 되고

2를 만났을 때 해당 2자리를 9로 채워주면서

미로를 탈출하게 된다.

 

data = [input().split() for _ in range(10)]
x, y = 1, 1
breaks = 0

for i in range(x, 10):
  if breaks == 1:
    break
  for j in range(y, 10):
    if data[i][j] == '2':
      data[i][j] = '9'
      breaks += 1
      break
    if data[i][j] == '0':
      data[i][j] = '9'
    elif data[i][j] == '1':
      x = j-1
      y = j-1
      break

for i in range(10):
  for j in range(10):
    print(data[i][j], end=' ')
  print()

 

조금 코드가 더럽고 효율적이지 못하긴 한데,,

아무튼 while을 사용하지 않고 2중 for문 형태로 풀었다.

 

x와 y 좌표는 (1,1)부터 시작하여 미로를 시작하기 때문에

기본 값으로 넣어주고 반복문 탈출을 위해 breaks 변수를 0으로 초기화하였다.

 

나머지는 각 해당하는 좌표가 0이면 9를,

1이면 밑으로 내려가기 위해 x와 y 값에 j-1만큼을 주고

2이면 해당 좌표는 9로 주고 2중 반복문을 탈출하는 형태로

코드를 작성하였다.

 

다음에는 while을 사용하여

탈출을 위한 변수없이 한방에 탈출하는 코드로

리팩토링 해야겠다,,

 

 

✔️ 코드업 파이썬 기초 100제 Clear!

 

 

파이썬 기초 100제 Clear❗

 

화이팅 💪