ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 22.10 심사문제 2의 거듭제곱 리스트 생성하기
    코딩도장 심사문제모음 2020. 10. 14. 16:11
    728x90

    표준 입력으로 정수 두 개가 입력됩니다(첫 번째 입력 값의 범위는 1~20, 두 번째 입력 값의 범위는 10~30이며 첫 번째 입력 값은 두 번째 입력 값보다 항상 작습니다). 첫 번째 정수부터 두 번째 정수까지를 지수로 하는 2의 거듭제곱 리스트를 출력하는 프로그램을 만드세요(input에서 안내 문자열은 출력하지 않아야 합니다). 단, 리스트의 두 번째 요소와 뒤에서 두 번째 요소는 삭제한 뒤 출력하세요. 출력 결과는 리스트 형태라야 합니다.

    사용한 코드

    1. map

    2. int

    3. input

    4. split

    5. for 문

    6. if 문

    7. range

    첫 접근 방법

    [식 for 변수 in 리스트 if 조건문] 사용과 ** 거듭제곱을 위한 연산자를 알면 쉽게 풀수 있다.

    하지만, 강의에서 의도한 바가 아닌 리스트 표현식 하나만으로 통과했기에 의도한 바대로 코딩을 다시 해보았다.

    풀이.1

    1. 입력값을 2가지 변수에 정수로 변환해 저장. (입력 안내문 출력 없음)

    a, b = map(int, input().split())

    2. c 라는 변수를 하나 더 생성하여 리스트를 할당해준다.

    리스트 표현식과  for, if문, ** 사용, 임의의변수 i 

    문제에서 요구한 2**2, 2**9를 제외하기 위한 if 조건문 (a+1, b-1)

     

    c = [2**i for i in range(a, b+1) 

                if i != a+1 and i != b-1] # i 가 a+1, b-1과 같지 않을때만 i값을 가져오자

    ## 가독성을 좋게하기 위해 줄바꿈 및 들여쓰기

    더보기

    a, b = map(intinput().split())

     

    c = [2**i for i in range(a, b+1)

              if i != a+1 and i != b-1]

    print(c)

    풀이.2

    강의내용에서 배운 리스트 삭제를 통한 풀이방법

    1. 입력값을 2가지 변수에 정수로 변환해 저장. (입력 안내문 출력 없음)

    a, b = map(int, input().split())

    2. c 라는 변수를 하나 더 생성하여 리스트를 할당해준다.

    리스트 표현식과 리스트 삭제 메서드를 사용

    c = [2**i for i in range(a, b+1)]

    del c[1] ##대괄호 // 소괄호 x (어쩌피 error뜸)

    del c[-2]

    print(c)

    더보기

    a, b = map(intinput().split())

     

    c = [2**i for i in range(a, b+1)]

    del c[1]

    del c[-2]

    print(c)

    ## del <-> pop()로 대체 가능하며, remove()는 값을 찾아내 삭제하는것으로 대체하기 어렵다! 값을 하나하나 다 기억하지 않는 한

    728x90
Designed by Tistory.