ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [구름톤 챌린지 Week1(2)] 구현 중심 문제 테크닉 기본
    Challenges/구름톤 챌린지 2023. 8. 19. 18:01

    리스트 컴프리핸션(list comprehension)은 파이썬에서 리스트를 생성할 때 사용하는 간결하고 읽기 쉬운 방법입니다.
    기존의 for 루프 문법을 사용하여 리스트를 만드는 것보다 더 간단하게 표현할 수 있습니다.

    기본 구조는 다음과 같습니다:

    [expression for item in iterable if condition]
    1. expression은 현재의 item에 대한 연산이나 처리 결과입니다.
    2. item은 iterable로부터 가져온 각각의 원소를 나타냅니다. ( expression과 함수적으로 관련 없다면 _ 를 써도 무방합니다. )
    3. iterable은 반복 가능한 객체입니다.
    4. condition은 선택적 조건으로, 이 조건을 만족하는 item에 대해서만 expression이 수행됩니다.

    예시:

    1. 기본적인 리스트 컴프리핸션: 0부터 9까지의 숫자를 제곱한 리스트를 만들기
    squared_numbers = [x**2 for x in range(10)]
    print(squared_numbers)  # [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
    1. 조건을 포함한 리스트 컴프리핸션: 0부터 9까지의 숫자 중 짝수만 제곱하기
    squared_even_numbers = [x**2 for x in range(10) if x % 2 == 0]
    print(squared_even_numbers)  # [0, 4, 16, 36, 64]
    1. 코테 빈출 : N줄에 걸쳐 값을 입력받아 저장하기
    c = [int(input()) for _ in range(N)]

    리스트 컴프리핸션은 코드를 간결하게 만들어 줄 뿐만 아니라, 읽는 사람이 의도를 빠르게 파악할 수 있도록 도와줍니다. 하지만 너무 복잡한 로직을 담는다면 오히려 가독성이 떨어질 수 있으므로 적절한 복잡도에서 사용하는 것이 좋습니다.

    복습퀴즈

    - 문자열을 split() 적용시 저장되는 데이터타입은?
    답 : list (리스트, 따라서 배열로 특정 항목 접근가능!)

    - 숫자 여러개 (예 : '11 2 4 5')에 map(int, input().split()) 적용시 데이터타입은?
    답: map 객체 (따라서 리스트로 형변환 해야함!)

    result = map(int, input().split())
    
    print(result)  # <map object at (some memory address)>
    print(list(result))  # [integer values based on input]

    정렬 (sort)

    파이썬에서는 sort() 함수 또는 sorted() 함수를 이용해 쉽게 정렬할 수 있다.
    주의 : 기본 '오름차순' 기준이다!

    비교-확인

    로직은 check=True로 기본설정 -> if문으로 비교 후 틀리면 check=False로 수정 -> for문으로 감싸서 이 과정 반복 -> check 값에 따라 출력값 결정(if문)

    추가로 check 없이 사용하는 for-else 문이 있었다.

    '''
    for i in range(N):
        if 조건문:
            break
    else:
        코드
    
    와 같은 꼴로 사용합니다.
    만약 for문 중간에서 break가 실행되면 else 부분을 실행하지 않습니다.
    break에 걸리지 않고 for문이 끝까지 도는 경우 else 부분을 실행합니다.
    '''
    
    for i in range(N):
        if arr[i] != sortedArr[i]:
            # 배열이 다른 경우이므로 0을 출력하고 else 부분을 건너뜁니다. 즉, 프로그램을 종료합니다.
            print(0)
            break
    else:
        # 만약 break없이, for문이 온전히 끝났다면 이 else 부분을 실행합니다.
        print(sum(arr))

    구름톤 4일차 - 햄버거 문제

    정해의 방식과 내 코드 비교해보자면
    정해는 우선 최댓값 기준으로 좌우 나눠서, 정렬한 값을 정답으로 변수 지정하고 비교하는 방식
    내 코드는, 좌우 나누는 것 까지는 동일, 인접한 두개를 계속 비교해나가는 방식

        ##for i in range(max_index + 1, N): #오른쪽 비교
         for i in range(max_index - 1, -1, -1): ## 왼쪽 비교
              if freshness[i] > max_value:
                return 0
            max_value = freshness[i]

     

    좀더 스스로에게 챌린지를 하자면, 다른 언어들의 해설도 리뷰하고 싶다. 
    이렇게 친절하게 다 알려주는데... 냉큼 받아먹어야 하지 않겠나..!!

인공지능 / 양자컴퓨팅 / 생산성