[프로그래머스] k번째 수, 완주하지 못한 선수

1. k번째 수

배열 array의 i번째 숫자부터 j번째 숫자까지 자르고 정렬했을 때, k번째에 있는 수를 구하려 합니다. 배열 array, [i, j, k]를 원소로 가진 2차원 배열 commands가 매개변수로 주어질 때, commands의 모든 원소에 대해 앞서 설명한 연산을 적용했을 때 나온 결과를 배열에 담아 return 하도록 solution 함수를 작성해주세요.

def solution(array, commands):
    answer = []
    for li in commands:
        i = li[0]
        j = li[1]
        k = li[2]
        a = sorted(array[i-1:j])
        answer.append(a[k-1]) 

    return answer
  • 정렬함수 sorted() sort랑 다름 (sort는 원본값 변함!)
  • 리스트 슬라이싱 점프투파이썬
    인덱스 0부터 시작이라 [i-1:j] 해줘야함.
  • 리스트에 요소 추가 append(x) : 리스트 맨마지막에 x 추가함수

2. 완주하지 못한 선수

집합

  • 집합 자료형 만들기
    집합(set)은 파이썬 2.3부터 지원하기 시작한 자료형으로, 집합에 관련된 것을 쉽게 처리하기 위해 만든 자료형이다.
  • 집합 자료형의 특징
    -중복을 허용하지 않는다.
    -순서가 없다(Unordered).
    -> 만약 set 자료형에 저장된 값을 인덱싱으로 접근하려면 다음과 같이 리스트나 튜플로 변환한후 해야 한다.
  • set 자료형을 정말 유용하게 사용하는 경우는 교집합, 합집합, 차집합을 구할 때이다.

    & : 교집합
    | : 합집합
    - : 차집합

반복문 (for in)

  • iterable은 member를 하나씩 반환할 수 있는 object를 말합니다.
  • 앞서 다룬 타입 중 list, dictionary, set, string, tuple, bytes가 iterable한 타입입니다.

    for item in iterable:
    ... 반복할 구문...

  • range도 iterable 합니다
  • range는 range(시작숫자, 종료숫자, step)의 형태로 리스트 슬라이싱과 유사합니다.
  • range의 결과는 시작숫자부터 종료숫자 바로 앞 숫자까지 컬렉션을 만듭니다.

    range(5)
    for i in range(5):
    ... print(i)
    ...
    0
    1
    2
    3
    4

def solution(participant, completion):
    #동명이인 아닐때
    doc = list(set(participant)-set(completion))

    if len(doc) != 0:
        return doc[0]
    #동명이인 일때
    p = sorted(participant)
    c = sorted(completion)

    for i in range(len(p)):
        if p[i] != c[i]:
            return p[i]
    answer = ''
    return answer

아래는 잘 푼 사람들 코드

  • 데이터의 개수를 셀 때 유용한 파이썬의 collections 모듈의 Counter 클래스

좋은 웹페이지 즐겨찾기