본문 바로가기
python

2020.09.01_알고리즘_자릿수 더하기

by 해맑은 코린이 2020. 9. 2.

2020.09.01_자릿수 더하기_알고리즘_정리 노트_

 

출처 - 프로그래머스

 

오늘은 자릿수 더하기 알고리즘! 쉽고 간단하지만, 중요한 개념들이 많이 들어있고 개인적으로 다른 사람 풀이들이 너무 신박해 포스팅으로 남겨보기 !

 

음.. 간단하게 for문으로 하나씩 빼서 더해버리면 안되나? 라고 생각하겠지만, for문은 반복가능한 객체만 넣을 수 있기 때문에 대표적으로 리스트, 튜플, 문자,range() 등등이 있다. 하지만 숫자는 반복이 불가능하기 때문에 for문에 넣을 수 없다!

 

그렇다면 ? - 숫자를 문자로 바꿔서 분리해주고, 분리한 다음 다시 숫자로 바꿔서 더해주자!

 

 

 

나의 답!

 

먼저 n 을 문자열로 변환시켜주기 위해 str 이라는 것을 썼다. str은 문자열로, int 는 정수열로 바꿔준다. 

 

 

여기서 찾으면서 본 개념 정리!

 

문자열을 만드는 함수 str, repr 차이

 

str

란 문자열로 변환을 하는 기능을 가지는 데, 만약에

 

a = 12.3456789

print(str(a))

 

출력값 >>>>>> 12.345

 

이렇게 조금 정리해서 출력을 해준다. 문자열로 변환은 되었지만, 조금 정리된 느낌이다.

 

만약 그 자체를 들고오고 싶거나, 완벽한 문자열을 만들고 싶다면?

 

그 때 써주는 것이 바로 repr 함수이다.

 

 

 repr

란 str 과 같이 같은 문자열로 변환해주는 함수지만, 완벽한 문자열로 변환을 해줄 수 있다.

 

a = 12.3456789

print(repr(a))

 

출력값 >>>>>> "12.3456789"

 

 

이렇게 repr 은 따옴표와 함께 전체를 문자열로 변환해준다. repr 의 장점은, 객체를 똑같이 저장해줌으로써 재사용성이 용이해진다. 그에 비해 str 은 만약 복잡한 숫자가 있다면, 그대로를 반환하지 못하기 때문에 repr 보다 정확성이 떨어진다.

 

 

하지만 vs 코드에서는 어찌 된 것인지 똑같이.. 출력해주더라 엥엥

ㅋㅋㅋㅋㅋㅋㅋㅋㅋ그래서 일단 범용적으로 많이 쓰는 str을 쓰다가 혹시 뭔가가 이상하다면 repr 도 써보는 거 추천! 파이썬 버전마다 str 가 출력하는 값이 달라진다 카더라.

 

int

는 문자열을 숫자로 바꿔주는 함수라고 기억하지만, 정확히 말하면 정수로 바꿔주는 역할을 한다. 그래서

 

a = 12.3456789

print(int(a))

 

 

출력값 >>>>>> 12

 

 

이렇게 a 를 프린트 해주었을 때, 소수점을 제외하고 12만 출력해준다. 보통 type 메소드와 함께 많이 쓰인다. ( 소수점까지 다 출력하는 숫자 타입은 float 다.  이고는 나중에 좀 더 자세히 포스팅 해보게씀 ㅎㅁㅎ )

 

자세히 들어가서 그렇지 그냥 문자열 쓰고 싶을때는 str, ( 리스트는 join - 완주하지 못한 선수 포스팅 때 다뤘음. 기억하려고 나혼자 주절주절 ㅎㅁㅎ ) 숫자열 쓰고 싶을 때는 int 를 쓰면 된다!

 


 

 

자 이제 다시 코드 정리로 돌아와서,  

 

그렇게 n을 str 로 변환을 시키고 for문을 돌려준다. 그러면 하나하나 분리가 되고 "1", "2" ,"3" 이렇게 분리가 될 것 이다. 그러면 우리는 ? 다시 int 를 사용해서 1,2,3 을 리스트에 다가 담아준다. 

그러면 answer = [ 1, 2, 3 ] 이라는 리스트가 완성 되었다. 그러면 우리는 리스트 안 요소들을 더해줄 때는 뭘 쓴다고 했었지!!!!!! sum 이라는 것을 써주면 되는거다. ( 이거는 알고리즘 예산에 적어 놓았는데, 뭐 대단한 기능은 아니라 따로 링크는 안걸어 두게씀. )

 

그러면 리스트 안 숫자들을 더해준 결과들을 리턴하는 것이다 ! 짝짝 숫자가 반복되는 객체가 아니기 때문에 파이썬에서는 이렇게 변환하는 풀이가 필요했다!

 

 

그럼 다른 사람들의 풀이를 볼까나!

 

 

출처 - 런치 블로그

 

 

 

다른 분의 풀이는 List Comprehension 으로 풀어서 한줄로 간단하게 표현했다. 

 

list Comprehension

는 지정된 표현식에 따라 새로운 리스트 컬렉션을 빌드하는 기능이다! 

 

형태는

 

[ 출력하는 값의 식 for 요소 in 범위 if 조건식 ]  을 쓰며, 이렇게 쓰면 간단하게 한줄로 적어 줄 수 있는 것이다!

 

파이썬 3부터는 dictionary 와 set 도 comprehension 으로 써줄 수 가 있다. 

 

간단하게 형태만 짚고 넘어갈까?

 

Dictionary Comprehension 

 

{ Key:Value for 요소 in 범위 if 조건식 }

 

Set Comprehension 

 

{ 출력하는 값의 식 for 요소 in 범위 if 조건식 }

 

 

워.. 역시 공부하면서 새로운 것을 많이 발견하는 것 같다. 이렇게 한 줄로 간단히 표현하는 방법도 있구나.. 라는 것도 배우며 오늘 알고리즘 포스팅 끝!

댓글