ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 24.6 심사문제 : 높은 가격순으로 출력하기
    코딩도장 심사문제모음 2020. 10. 29. 00:37
    728x90

    표준 입력으로 물품 가격 여러 개가 문자열 한 줄로 입력되고, 각 가격은 ;(세미콜론)으로 구분되어 있습니다. 입력된 가격을 높은 가격순으로 출력하는 프로그램을 만드세요(input에서 안내 문자열은 출력하지 않아야 합니다). 이때 가격은 길이를 9로 만든 뒤 오른쪽으로 정렬하고 천단위로 ,(콤마)를 넣으세요.

    사용한 코드

    1. map

    2. input

    3. split

    4. sort(reveser=True)

    5. for문

    6 format (문자열 포매팅)

    첫 접근 방법

    처음은 함수.rjust(9)를 생각하였지만 rjust 로 코드를 구성하기가 까다로웠다.

    우선 map 객체로 당장 출력이 불가능하여 list로 감싼 후 sort를 이용한 내림차순 정렬을 사용하였다.

    sort는 map이 아닌 list에서 쓸수 있는 메서드이다.

    또한 1000 단위로 ,(콤마)를 출력에 나타내야하는데 이부분은 힌트를 보지 않고는 알 수 없었다.

    구글링을 해보니 아래 코드에 포함되어있는 포매팅 시 ,(콤마) 위치가 디폴트로 천단위로 찍어주는듯 하다.

    즉, 힌트 보고 풀었다. // 결과에 나오는 줄수 제한을 신경쓰지말고 생각하도록 하자.

    풀이

    1.  a 로 입력되는 값은 str이 아닌 int로 입력되어야 함에 따라 map으로 묶어주고 split 기준을 ' ; '로 지정

    a = map(int, input().split(';')

    2. 여기서 만들어진 a 는 map 객체이다, 따라서 후에 sort를 적용하도록 list로 감싸자

    b = list(a)

    3. b 에는 a 가 list로 변환되있는 상태이다. type(b) == class 'list'

    b.sort(revers=True) ## 여기서 sort()는 디폴트 오름차순으로 revers = True로 내림차순으로 정렬해준다.

    4. for 문을 사용하여 b에 있는 값을 모두 출력해준다.

    여기서 가격표시의 길이를 9로 만듬 + 오른쪽 정렬 + 천단위 ,(콤마) 로 출력되도록 만들어줘야한다.

    for i in b:

        print('{0:>9,}'.format(i))

     

    ## 여기서,  format method에서 채우기와 정렬 조합해서 사용하는 아래의 구조를 사용한다.

    ## '{인덱스:채우기 정렬 길이 .자리수 자료형}'.format(값) 구조

    ## '{0:>9}'.format(i) ## 인덱스 : 0 ( 또는 공백 가능) , 채우기 : 공백(공백으로채움) 정렬  : > (오른쪽 정렬)

    ## 현재 위의 식은 정렬에서 끝나느 포매팅을 작성하였다.

    ## 여기서 위의 식과 같이 ,(콤마)가 없는 경우 아래와 같이 출력된다.

    ## 문제에서 원하는 1000단위에 ,(콤마)를 찍어야하는데 

    ## ('{0:>9,}'.format(i)) // 구글링 결과 해당 자리에 ,(콤마)를 기입하면 천단위로 ,가 기입되는게 디폴트값인것 같다.

    ## 디폴트 값인것으로 이해하고 넘어가도록 하자. (해당 부분때문에 힌트가 꼭 필요했다)

    ## 또는 locale 모듈을 불러와서 아래와 같이 표현할 수 있다고 한다.

    ※ 실제 코딩 도장의 해법과 다를  수 있으며, 답은 여러가지가 존재합니다.

    코딩 지적 정말 감사히 받겠습니다.

    728x90
Designed by Tistory.