실력진단
6주차: 498 → 498
이번주는 저번주와 동일한 점수이다. 그래도 한 가지 위로가 되는 점은 문제를 풀 때 더 완성도가 높아지고 있다.
그동안 연습한 dx, dy문제가 나오면 어려운 것은 아닌데, 시간이 부족하다. 손이 느리거나, 코드를 생각하는 시간이 긴 것같다. 이번주는 dx, dy문제를 1개 제외하고는 다 풀어봤다. 이제는 공부했던 점을 사용해 dx, dy문제는 풀어냈으면한다. 😂
이번주는 새롭게 객체 공부를 시작했다. 객체를 class로 생성한다는 것은 알았지만 tuple로 만들 수 있다는 점은 새롭게 알았다. 객체 공부도 빠르게 진행한 뒤 부족한 부분들을 더 채워나가야겠다.
부족한 점 👉 시뮬레이션 - dx, dy
dx, dy문제는 가장 난이도 높은 문제를 제외하고 다 풀었다! 이제 문제를 만나면 정확하고 신속하게 풀도록 연습해야겠다.
학습내용
이동경로상에 있는 모든 숫자 더하기
n, t = map(int, input().split())
commend = input()
arr=[
list(map(int, input().split()))
for _ in range(n)
]
def in_range(dy, dx):
return 0<= dy and dy< n and 0<=dx and dx< n
dys, dxs = [0, 1, 0, -1], [1, 0, -1, 0]
y = len(arr)//2
x = len(arr)//2
look = 3
score = arr[y][x]
for cmd in commend:
if cmd == 'F':
dy, dx = y + dys[look], x + dxs[look]
if in_range(dy, dx):
y = dy
x = dx
score += arr[y][x]
elif cmd == 'R':
look = (look+1) % 4
elif cmd == 'L':
look = (look-1) % 4
print(score)
격자 크기, 명령어 횟수, 명령어, 격자정보가 주어진다.
가운데 위치에서 시작하며 북쪽을 바라보는 상태이다.
이전에 풀었던 문제들과 다른점은 시작위치가 가운데라는 점이다.
이를 위해 각각 배열의 행, 열의 길이를 2로 나눈 값을 y, x값으로 설정한다.
이후에는 명령에 따라 전진 또는 회전을 한다.
갈수 있는 위치라면 이동후 해당 위치의 값을 score에 더한다.
가운데에서 시작하여 빙빙 돌기
n = int(input())
arr=[
[0]*n
for _ in range(n)
]
y = n // 2
x = n // 2
look = 0
move=1
num=1
step=0
dys, dxs = [0, 1, 0, -1], [1, 0, -1, 0]
while(num<n*n+1):
for _ in range(move):
arr[y][x] = num
y = y+dys[look]
x = x+dxs[look]
num+=1
if num > n*n:
break
look = (look-1) % 4
step+=1
if step == 2:
step=0
move +=1
for i in range(n):
for j in range(n):
print(arr[i][j], end=' ')
print()
가운데 위치에서 시작해 반시계방향으로 숫자를 채워나간다. (1 ~ n*n+1)
이전에 풀었던 문제들 처럼 외곽부터 채우는 방식을 그대로 사용한다면 반시계로 회전하지 않고 직진하며 채워지게된다.
해당 문제를 해결하기 위해서는 규칙을 찾는 것이 중요하다.
표의 일부분을 살펴본다면 2번 움직일 때 마다, 직진횟수가 1회 증가한다.
이러한 규칙을 적용하기 위해 27번~30번줄의 step과 move를 사용한다.
최종적으로 격자의 숫자가 1~ n*n+1까지 채워질동안 코드를 진행한다.
이러한 규칙을 사용하면 다음칸이 이전에 간 칸인지, 격자를 벗어나는 칸인지 확인하지 않아도 된다.
007
# class ver.
class info:
def __init__(self, code, point, time):
self.code = code
self.point = point
self.time = time
def show(self):
print('secret code :', self.code)
print('meeting point :', self.point)
print('time :', self.time)
c, p, t = input().split()
info1 = info(c, p, t)
info1.show()
# tuple ver.
c, p, t = input().split()
info = (c, p, t)
code, point, time = info
print('secret code :', code)
print('meeting point :', point)
print('time :', time)
객체로 코드, 포인트, 시간을 만들고 이를 출력하는 코드이다.
상단은 class를 사용헤 객체를 만든 코드다.
하단은 튜플을 사용해 객체를 만든 코드다.
Next Level
#class ver.
class user:
def __init__(self, name='codetree', level=10):
self.name = name
self.level = level
def show(self):
print('user', self.name, 'lv', self.level)
user1 = user()
user1.show()
n, l = input().split()
user1.name = n
user1.level = l
user1.show()
#tuple ver.
user1 = ('codetree', 10)
name, level = user1
print('user', name, 'lv', level)
n, l = input().split()
user1 = (n, l)
name, level = user1
print('user', name, 'lv', level)
객체를 만든 후 초기화값을 출력한 뒤, 객체 값을 변경하여 출력하는 코드이다.
상단은 class, 하단은 tuple이다.
이번주 챌린지 포스팅은 나의 불찰로 6주차로 인정되지 못한다. 😂 실패로 떠 있길래 확인했더니 월요일까지 업로드를 했어야한다. 아쉽지만 내가 제대로 확인하지 못한 것이니 어쩔 수 없다. 앞으로는 유의사항이나 방법을 잘 확인하자.
'CODING TEST > Code Tree' 카테고리의 다른 글
[코드트리 챌린지] 8주차 - 마무리와 시작(코드네임, 사는 지역, 비오는 날) (0) | 2023.10.30 |
---|---|
[코드트리 챌린지] 7주자 - 계속해서 나아가(용량이 다른 3개의 물통, 십진수와 이진수) (0) | 2023.10.20 |
[코드트리 챌린지] 5주차 - 이어서 쉬어가는 한 주( 빙빙 돌며 숫자 사각형 채우기 / 빙빙 돌며 숫자 사각형 채우기2 ) (1) | 2023.10.09 |
[코드트리 챌린지] 4주차 - 이번주는 쉬어가기( 되돌아오기2 / 격자 위의 편안 상태) (1) | 2023.10.02 |
[코드트리 챌린지] 3주차 - 조금씩 올라서기 (1이 3개 이상 있는 위치 / 작은 구슬의 이동 / 빙빙 돌며 숫자 사각형 채우기 / 되돌아오기) (0) | 2023.09.25 |