[프로그래머스] 자릿수 더하기

이진욱(JIN WOOK)·2024년 11월 10일
0

네이버 블로그에서 2024. 11. 1. 20:47 에 작성된 글입니다.

https://school.programmers.co.kr/learn/courses/30/lessons/12931

배경지식이 없었기 때문에 개인적으로는 조금 어려운 문제였다.
처음에는 문자열로 바꿔 일일히 분리해볼까 하는 생각도 들었는데
문자열을 일일히 분리하는 방법도 몰랐다.

그래서 구글에 검색해서 해결법을 봤는데 10으로 나누고.. 나머지 연산자를 사용해서 각자리의 수를 빼내면 된다~
하면서 여러가지 코드가 적혀있는데
대체 왜 10을 써야하지? 왜 나누기를 하고 나머지를 추출해 내지? 라는 의문이 계속 들어서
이 숫자는 어떻게 만들어지는가? 라는 의문에서 출발해 해답을 얻을수 있었다.

123=1×102+2×101+3×100123 = 1 \times 10^2 + 2 \times 10^1 + 3 \times 10^0

987=9×102+8×101+7×100987 = 9 \times 10^2 + 8 \times 10^1 + 7 \times 10^0

숫자는 이렇게 만들어진다.
100의 자리는 10의 2승
10의자리는 10의 1승...

즉, 10을 기준으로 해서 숫자가 만들어지는것이다.
123 수식에서 10을 나누어 보자 몫으로는 12 나머지는 3
987 - 몫으로는 98 나머지는 7

10으로 나누게 되면 항상 몫으로는 한자리 밀려나고 (123 -> 12)
나머지 값으로 일의 자리수만 남기는걸 알수있다. (12를 10으로 나누게 되면 나머지는 2가 나온다)

이렇게 하다보니 큰 틀을 잡을수 있었다.

어떠한 수를 10으로 나눈다 -> 일의자리수가 떨어져나가고 그 일의 자리수는 나머지 값으로 나오게 된다.

코드로 이렇게 표현했다.

여기서 알수 있는 힌트는 10을 지속적으로 나눠줘서 1의 자리수를 계속 없애줘야한다는 것이다
지속적으로 나누면서 나머지만을 추출하면..?
-> 수를 분리할수 있겠다.

뭔가 지속적으로 나눠줘야 하고, 값을 계속 누적시켜 더해줘야 한다는 생각이 들어
반복문을 사용하기로 결정했다.

로직을 얼마나 반복할것인가?
-> 몫이 0보다 클떄 까지만

완성된 코드는 이렇다.

123이 주어진다면
while문 내에서
answer = 0 + 3
num = 12

answer = 3 + 2
num = 1

answer = 5 + 1
num = 0

답은 6

이번주는 정말 정신적으로 힘든 한주였다.
정말 내가 뭘 우선적으로 공부해야 할지 너무나도 혼란스러웠다.
머릿속으로 정리가 안되서 너무 힘들다.

이전에 문법공부를 했을때 심리적으로 불안정한 상태에서 끝내야지 끝내야지 하는 강박 관념때문에 인강만 듣고 복습은 제대로 안하고
결국 끝내기는 했었는데.. 힘든상황 속에서 겨우겨우 끝낸거라 그런지
내가 정확하게 알고 있지 않은것임에도 불구하고 자꾸 문법은 잘 알고 있어 라고 생각하게 되는거 같다.
부트캠프에서 제공하는 강의를 들어도 머릿속에 들어오질 않는다.
그냥 너무 혼란스럽다.

주말에는 과제 해설영상중 관계를 맺는것에 관해서 아주 흥미로운 코드가 있어서 이거랑
클로저, ARC 와같은 메모리 구조와 관련된걸 다시 공부해볼 생각이다.

profile
기술로부터 소외 되는 사람이 없도록 우리 모두를 위한 서비스를 만들고 싶습니다.

0개의 댓글

관련 채용 정보