[크래프톤 정글] 11일 - 시험

wnajsldkf·2023년 4월 13일
0

정글

목록 보기
5/14
post-thumbnail

1주차 알고리즘 시험

더하기 사이클

문제 풀이 단계를 차분하게 정리하면 풀 수 있는 문제이다.
무조건 10의 자리로 만들어야한다고 생각해서 복잡하게 단계를 구상했는데 그렇지 않았다.(시험에서 뭔가 이상한 방향으로 가면 과감하게 나오는 것도 필요하다.😅)

이 문제에서 0을 앞에 넣어야한다는 생각에 str로 형변환하면서 풀이하려고 했는데 자릿수로 할 수 있는 문제였다.
이후에 두 방식대로 모두 풀이했다.

자릿수로 풀이한 경우

from sys import stdin as s

N = int(s.readline())
count = 0
def findCycle(n):
    global count
    count += 1

    if(count > 1 and n == N):
        return

    temp_N = n % 10 + n // 10

    new_N = 10*(n % 10) + temp_N % 10

    findCycle(new_N)

findCycle(N)
print(count-1)

문자열로 풀이한 경우

from sys import stdin as s

N = int(s.readline().rstrip())

count = 0

def findCycle(n):
    global count

    if (n == input_N and count > 0):
        return

    count += 1

    sum_N = str(int(n[0]) + int(n[1]))
    new_N = n[-1] + sum_N[-1]

    findCycle(new_N)

if len(str(N)) < 2:
    input_N = '0' + str(N)
else:
    input_N = str(N)

findCycle(input_N)
print(count)

자릿수로 구한 방식은 결과값 구할 때 -1 했는데, 그 이유는 먼저 주어진 수가 10보다 작다면, 앞에 0을 붙여 두 자리 수로 만들고, 각 자리의 숫자를 더한다. 은 개수로 세지 않기 때문이다.

문자열에서는 다음 코드처럼 이 부분을 밖에서 해줬다.

if len(str(N)) < 2:
    input_N = '0' + str(N)
else:
    input_N = str(N)

시험은 시험이라고 긴장되었다.
이전에 풀이한 문제도 있었는데 제대로 풀지 못한 것 같아 아쉽다. 1번은 못풀었고, 2,3번도 이번주의 목표에 부합하지 못했다. 아직 재귀와 부르트 포스가 익숙치 않은데 하루에 1문제 정도 리스트업해서 풀이해야겠다.
시험은 동료와 리뷰하면서 업데이트했는데 내가 몰랐던 내용을 질문할 수 있었고, 새로운 내용도 알 수 있었다. 또 코드 스타일도 구경하면서 이렇게도 작성할 수 있구나를 알 수 있어 유익한 시간이었다.


오늘부터 TIL 작성을 시작한다!
항상 공부한 내용을 정리해두긴 했는데 자잘한 내용과 큼직한 것을 구분하고 싶기도 하여 정리한다. 하루에 느낀점도 간략하게 적어두면 좋을 것 같다.

시험 끝나고 너~무 잠와서 밥먹고 자고 왔다. 시험이 끝난 날에는 집중이 잘 안되는 것 같다.

profile
https://mywnajsldkf.tistory.com -> 이사 중

0개의 댓글