알고리즘(algo)/코페100제

파이썬 #14 (콤마 재귀)

dDong2 2021. 1. 8. 23:52

# 코딩 페스티벌 파이썬 100제

 

<문제 56>

예제 딕셔너리가 주어졌을 때 한국의 면적과 가장 비슷한 국가와 그 차이를 출력하는 문제이다.

<내 코드>

1. 한국의 value값을 korea에 저장해준 다음에 pop함수로 딕셔너리에서 한국을 삭제한다.

2. 모든 key값과 value값을 각각의 리스트로 만들어준다.

3. max값에 width의 max값을 담아주고, 리스트에 같은 인덱스에 저장될 수인 same을 만들어준다.

4. width[0]값부터 차례로 korea를 뺀 값의 절댓값이 작으면 max값을 새롭게 저장한다.

5. 절댓값의 크기가 가장 적은 값의 인덱스 번호를 same에 저장한다.

6. 마지막 print문으로 같은 인덱스 번호를 가진 나라를 출력하고 제일 작은 절댓값이 저장된 max를 출력한다.

 

어쩌면 틀렸다고 생각이 들기도 한다.

그리고 굳이 리스트를 2개나 만들어야 했나 생각이 들기도 했다.

이유는 해답에 있었다.

<해답 코드>

해답에서는 key값과 value값을 따로 리스트로 만들지 않고 한 번에 리스트로 만들었다.

items() 함수는 key, value값을 모두 가져오기 때문이다.

여기서도 max값을 gap 변수에 선언하고 그것과 비교해서 마지막에 한국의 값인 220877을 뺀 값을 출력한다.

이게 군더더기 없는 깔끔한 답이라고 생각했다.

 

<문제 57>

0부터 1000까지 1의 개수를 세는 프로그램을 만드는 문제이다.

예로 0부터 20까지 1, 10, 11, 12... , 19까지 12개의 1이 세어지면 잘 작동하는 것이다.

<내 코드>

기본적인 원리로 만들었더니 코드가 많이 길어졌다.

1부터 1000까지 str형태로 list에 저장한 다음에 0번째 리스트 값부터 1을 세어진다.

<해답 코드>

해답처럼 함수로 정의해서 조금 더 깔끔하게,

그리고 str과 list와 range를 전부 포함해서 count 하게 만드는 사고력이 필요할 것 같다.

 

<문제 58>

숫자를 입력받고 천 단위로 콤마(,)를 찍어주는 문제이다.

코드를 세 가지 형태로 작성해보았다.

<코드 예제1>

기본적인 format함수에서 변수 n을 받아 천단위로 콤마를 찍어준다.

<코드 예제2>

format 함수의 응용이라고 생각하면 되는데, 0번 변수를 십진수로 천 단위로 콤마를 찍어주는 형태이다.

<코드 예제3>

마지막은 재귀 함수로 작성한 것이다.

1. 숫자가 123같이 길이가 3개 미만이면 그대로 반환한다.

2. 숫자가 음수("-")로 시작하면 음수 기호를 찍고 재귀해준다. (-123은 첫 번째 if문, -1234는 네 번째 if문)

3. 숫자에 소수점(".")이 들어가면 그대로 반환한다. (이것도 재귀로 반환할 수는 있다)

4. 숫자가 1234같이 길이가 4개 이상이면 [:-3]까지는 재귀해주고 뒤에 콤마를 붙인 뒤 나머지 3개를 출력한다.

ex) 12345678이라고 하면 12345 + , + 678을 return 하고, 다시 12345를 재귀 호출해서

12 + , + 345를 만들어 준 다음에 연결하면 12,345,678이 완성된다.

 

12시가 되기 전에 우선 먼저 글을 쓰고 다음 문제는 이어서 올리겠다.

 

오늘도 수고하셨습니다 : )