JLOG

[코드트리 조별과제] 1주차 문제 풀이 본문

기타

[코드트리 조별과제] 1주차 문제 풀이

정정선선 2024. 8. 1. 21:56

오랜만에 다시... 코테 공부하려고 노트북을 켰다.

백준으로 할까 하다가, 실력 진단을 할 수 있고 실력에 맞는 커리큘럼을 제공하는 코드트리를 선택했다.

 

진짜 오랜만에 문제를 풀어서 그런가, 예전부터 꾸준히 공부해서 시험 문제를 잘 볼지 알았는데,

으악 생각보다 점수가 너무 낮아...

 

내가 풀었던 문제가 그렇게 어렵지도 않았다. 사소한게 잘못됐는데 그걸 못 찾아서 틀렸다...

으악~~ 다시 꾸준히 공부해야지

 

그래도 이번 주 3일이나 코테 공부했다.

쉬운 문제들이지만 오늘 푼거만 5문제~

 

쉬운거라도 조금씩 풀다보니 감을 좀 되찾은거 같고, 지금 풀고 있는 것들이 너무 쉽다.

그나마 좀 어려웠던게 레이저쏘기?

침착하게 했으면 금방 풀었을거 같은데, 지친 정신에 규칙을 잘 못 생각해내서 한두시간 걸린거 같다.

 

레이저 쏘기 풀이 코드

'\'을 입력으로 받으면 '\\'로 변환된다는 것을 첨 알았고, 길이를 똑같이 맞춰주어 사용하기 위해 '\\'를 '|'로 바꿔서 풀었다.

나머지는 /, \일 때 상하좌우가 어떻게 되는지 생각해서 천천히 구현하면 금방 풀린다.

# 낼 복습하기
# / 코드에서 쓸 떄 '//'로 써줘야함
N = int(input())
mirrors = []
for _ in range(N) :
    mirrors.append(input().replace('\\','|'))
K = int(input())

# 방향 하좌상우
directions = [[1, 0], [0, -1], [-1, 0], [0, 1]]

def get_start(K) :
    # 시작 위치
    # n // 3으로 나눠서 d_idx 설정
    d_idx = (K - 1) // N

    # x 좌표 구하기, y 좌표는 여기서 +N-1 더하기
    start_points = [0] * N
    tmp = [x for x in range(1, N-1)]
    start_points += tmp
    start_points += [N - 1] * N
    start_points += reversed(tmp)

    K = K - (K // N) - 1
    y = start_points[K]
    x = start_points[(K + (N - 1)) % len(start_points)]
    # 복잡하게 생각하지 말고, 케이스가 적은 경우는 if 문으로 나눠서 구현하는게 더 빠름

    return y, x, d_idx

def check_inside_mmap(y, x) :
    if (0 <= y < N and 0 <= x < N) :
        return True
    return False
    #  return 0 <= x and x < n and 0 <= y and y < n 이런식으로 바로 return 때려줘도 됨

y, x, d_idx = get_start(K)
# '\\'->'|' -1, '/' +1
# 범위 벗어날 때까지 count
cnt = 0
while (check_inside_mmap(y, x)):
    d_idx = (d_idx + 2) % 4
    mirror = mirrors[y][x]
    if (d_idx in [0, 2] and mirror == '|') or (d_idx in [1, 3] and mirror == '/') :
        d_idx = (d_idx + 1) % 4
    else :
        d_idx = (d_idx + 3) % 4
    dy, dx = directions[d_idx]
    y += dy
    x += dx
    cnt += 1

print(cnt)

 

그거 말고는 dx,dy 테크닉 다 풀고 완전 탐색 푸는데 너무 이지이지~

다시 진단해봐야겠다~ 우하하 저번보단 잘 나오겠지

Comments