코딩테스트/백준

[백준][Python] 1436. 영화감독 숌

내만 2022. 7. 16. 00:51
728x90
반응형

 

 

 

 

 

 

🙆‍♂️문제


 

 

🙋‍♂️풀이


문제 요약 : 자연수 N을 입력받으면 숫자 666이 들어간 수 중 가장 작은 수부터 N번째로 작은 숫자를 출력하면 된다.

666이 첫 번째 1666이 두 번째...

 

 

🚀 입력받기


n=int(input())

간단하게 숫자 하나를 입력받는다.

 

🚀 경우의 수 탐색


이 숫자에는 패턴이 있다.

[0~9]666 다음은 [0]666[0~9],[1]666[0~9] ... 이런식으로 가다가 [0]666[0][0~9],[0]666[1][0~9] 이런식으로 패턴이 있다.

설명을 잘 못해가지구 코드를 보면 바로 이해가 되실겁니다.

 

movie=[]
for i in range(10):
    for j in range(10):
        for k in range(10):
            for q in range(10):
                case1=[i,j,k,q,666]
                case2=[i,j,k,666,q]
                case3=[i,j,666,k,q]
                case4=[i,666,j,k,q]
                case5=[666,i,j,k,q]

                case1=map(str,case1)
                case2=map(str,case2)
                case3=map(str,case3)
                case4=map(str,case4)
                case5=map(str,case5)

                string1="".join(case1)
                string2="".join(case2)
                string3="".join(case3)
                string4="".join(case4)
                string5="".join(case5)

                movie.append(int(string1))
                movie.append(int(string2))
                movie.append(int(string3))
                movie.append(int(string4))
                movie.append(int(string5))

1만개 이상 나올 수 있는 경우의 수를 모두 종합해서 movie 배열에 넣었습니다.

방법은 간단합니다.

  1. 반복문을 통해 배열로 만들고
  2. 배열을 문자열로 만들어서 join 함수를 통해 합치고
  3. int로 다시 형변환 시켜서 movie라는 배열에 append하기

 

그럼 여기서 2가지 의문이 생깁니다.

"값이 중복되는게 생기는데?" 와"순서대로 안되는데?" 입니다.

#값이 중복되는데?를 해결
movieSet=list(set(movie))

#순서대로 안되느데?를 해결
movieSet.sort()

위의 두 함수로 두 가지 의문을 해결합니다.

 

🚀 출력하기


print(movieSet[n-1])

출력할 때는 입력값에 1을 뺀 인덱스 값을 출력합니다. 배열 인덱스는 0부터 시작하기 때문입니다.

 

728x90
반응형