[프로그래머스 코딩테스트]Level01 - 좌석 구매

1 minute read

Level01 - 좌석 구매

문제 설명

아래 그림과 같이 공연을 관람하기 위한 100,000 x 100,000 크기의 격자 모양의 좌석이 있습니다.
이 공연장의 표를 구매하기 위해 K명의 관람객이 매표소에 한 줄로 서 있습니다. 이때, 관람객은 자신이 원하는 좌석에서만 공연을 관람하려고 합니다. 각 관람객은 매표소에서 자신이 원하는 좌석의 좌표를 말하고, 아직 아무도 구매하지 않은 좌석이면 해당 좌석의 표를 삽니다. 그러나 만약 이미 구매된 좌석이면 공연 관람을 포기하고 집으로 돌아갑니다. 줄을 서 있는 사람들이 구매하려는 좌석의 좌표가 순서대로 담겨있는 배열 seat가 매개변수로 주어질 때, 표를 구매하는 데 성공한 사람의 수를 return 하도록 solution 함수를 완성해 주세요.

제한사항

  • 줄을 서 있는 관람객의 수는 1 이상 100,000 이하입니다.
  • seat에는 관람객이 구매하려는 좌석의 좌표가 가장 앞에 있는 사람부터 순서대로 들어있습니다.
  • seat의 각 원소는 관람객이 구매하려는 좌석의 좌표이며, [가로 좌표, 세로 좌표] 순입니다.
  • 가로 좌표, 세로 좌표의 범위는 1 이상 100,000 이하의 정수입니다.

입출력 예

seat result
[[1,1],[2,1],[1,2],[3,4],[2,1],[2,1]] 4

첫번째 시도-실패(시간초과)

def solution(seat):
    answer=0
    for i in range(len(seat)):
        # print(seat[i+1:])
        if seat[i] not in seat[i+1:]:
            # print((seat[i]))
            answer+=1
    return answer

# print(solution([[1,1],[2,2],[3,3]]))
print(solution([[1,1],[2,1],[1,2],[3,4],[2,1],[2,1]]))

두번째 시도-성공

def solution(seat):
    answer = 0
    # set은 리스트 안의 중복 원소들을 제거해주는 기능이 있다!
    # 따라서 리스트를 set으로 만들고 그 길이만 출력하면 된다.
    seat = list(map(str, seat))
    answer = set(seat)
    return len(answer)
def solution(seat):
    return len(set(list(map(str, seat))))

Categories:

Updated: