코드업 기초 100제 완료
1. 코드업 100제 문제 풀기
Python 기초 문제들로 구성되어서 무난하게 총 2시간 정도 시간을 투자하여 무난히 다 풀 수 있었다. 아래에는 100제 문제들 중 정답률이 낮은 2개를 정리하였다.
2. 코드업 100제 문제 2개
6096 : [기초-리스트] 바둑알 십자 뒤집기
문제 링크
https://codeup.kr/problem.php?id=6096
문제 설명
부모님을 기다리던 영일이는 검정/흰 색 바둑알을 바둑판에 꽉 채워 깔아 놓고 놀다가…
“십(+)자 뒤집기를 해볼까?”하고 생각했다.
십자 뒤집기는 그 위치에 있는 모든 가로줄 돌의 색을 반대(1->0, 0->1)로 바꾼 후, 다시 그 위치에 있는 모든 세로줄 돌의 색을 반대로 바꾸는 것이다. 어떤 위치를 골라 집자 뒤집기를 하면, 그 위치를 제외한 가로줄과 세로줄의 색이 모두 반대로 바뀐다.
바둑판(19 * 19)에 흰 돌(1) 또는 검정 돌(0)이 모두 꽉 채워져 놓여있을 때, n개의 좌표를 입력받아 십(+)자 뒤집기한 결과를 출력하는 프로그램을 작성해보자.
참고 리스트가 들어있는 리스트를 만들면? 가로번호, 세로번호를 사용해 2차원 형태의 데이터처럼 쉽게 기록하고 사용할 수 있다. 리스트이름[번호][번호] 형식으로 저장되어있는 값을 읽고 쓸 수 있다.
입력
바둑알이 깔려 있는 상황이 19 * 19 크기의 정수값으로 입력된다. 십자 뒤집기 횟수(n)가 입력된다. 십자 뒤집기 좌표가 횟수(n) 만큼 입력된다. 단, n은 10이하의 자연수이다.
출력
십자 뒤집기 결과를 출력한다.
arr = []
for i in range(19) :
arr.append(list(map(int, input().split())))
n = int(input())
for i in range(n) :
x, y = map(int, input().split())
# 입력받은 x, y 좌표의 가로줄, 세로줄을 반복문을 통해서 1을 더하고 2로 나눔 (반전 효과)
for j in range(19) :
arr[j][y-1] = (arr[j][y-1] + 1) % 2
arr[x-1][j] = (arr[x-1][j] + 1) % 2
for i in range(19) :
for j in range(19) :
print(arr[i][j], end = ' ')
print('')
6098 : [기초-리스트] 성실한 개미
문제 링크
https://codeup.kr/problem.php?id=6098
문제 설명
본 문제는 python 의 빠른 기초 학습을 위해 설계된 문제로서 python 코드 제출을 기준으로 설명되어 있습니다.
영일이는 생명과학에 관심이 생겨 왕개미를 연구하고 있었다.
왕개미를 유심히 살펴보던 중 특별히 성실해 보이는 개미가 있었는데, 그 개미는 개미굴에서 나와 먹이까지 가장 빠른 길로 이동하는 것이었다.
개미는 오른쪽으로 움직이다가 벽을 만나면 아래쪽으로 움직여 가장 빠른 길로 움직였다. (오른쪽에 길이 나타나면 다시 오른쪽으로 움직인다.)
이에 호기심이 생긴 영일이는 그 개미를 미로 상자에 넣고 살펴보기 시작하였다.
미로 상자에 넣은 개미는 먹이를 찾았거나, 더 이상 움직일 수 없을 때까지 오른쪽 또는 아래쪽으로만 움직였다.
미로 상자의 구조가 0(갈 수 있는 곳), 1(벽 또는 장애물)로 주어지고, 먹이가 2로 주어질 때, 성실한 개미의 이동 경로를 예상해보자.
단, 맨 아래의 가장 오른쪽에 도착한 경우, 더 이상 움직일 수 없는 경우, 먹이를 찾은 경우에는 더이상 이동하지 않고 그 곳에 머무른다고 가정한다.
미로 상자의 테두리는 모두 벽으로 되어 있으며, 개미집은 반드시 (2, 2)에 존재하기 때문에 개미는 (2, 2)에서 출발한다.
입력
10*10 크기의 미로 상자의 구조와 먹이의 위치가 입력된다.
출력
성실한 개미가 이동한 경로를 9로 표시해 출력한다.
x, y = 1, 1
arr = [[0 for i in range(10)] for j in range(10)]
for i in range(10) : arr[i] = list(map(int, input().split()))
while True :
# 만약 현재 위치가 2(먹이)이면 9(이동경로)로 값을 바꾸고 반복문 나가기
if arr[x][y] == 2 :
arr[x][y] = 9
break
# 아니면 그냥 9(이동경로)로 값을 바꾸기
else :
arr[x][y] = 9
# 현재 위차가 (9,9)이면 더이상 갈 곳이 없으므로 나가기
if x == 9 and y == 9 : break
# 현재 위치가 (?, 9)이면 우측으로는 못가므로 아래쪽으로 갈수 있으면 가고 아니면 나가기
elif y == 9 :
if arr[x+1][y] == 1 : break
else :
x += 1
continue
# 현재 위치가 (9, ?)이면 아래로는 못가므로 오른쪽으로 갈수 있으면 가고 아니면 나가기
elif x == 9 :
if arr[x][y+1] == 1 : break
else :
y += 1
continue
# 평상시에는 우측, 아래 순서로 이동하기
else :
if arr[x][y+1] != 1 :
y += 1
continue
elif arr[x+1][y] != 1 :
x += 1
continue
else :
break
for i in range(10) :
print(*arr[i])
3. 문제들을 풀어본 후기
- 코드업 기초 100제 문제는 교육 목적의 문제들로서 파이썬에 대한 개념이 확립안되어있는 상태에서도 풀기 좋다.
- 이제까지 공부한 것들을 정리할 수 있어서 좋았다.
- 빠른 시간에 많은 문제들을 풀어보니 성취감 또한 충전되었다!
Comments