본문 바로가기
Programming/코딩 문제 풀이

[프로그래머스 Lv.2] 혼자 놀기의 달인 (파이썬 풀이)

by 삼SAM 2022. 10. 28.

문제 링크

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

[풀이]

* cards의 원소는 "자연수"이다.

 

요약: 모든 그룹의 상자 개수를 구하고 가장 큰 수와 두 번째로 큰 수를 곱하여 반환한다.

  1. 인덱스 순서대로 cards 배열의 원소를 확인한다. 이때, 자연수가 아닌 0인 원소는 열어본 상자로 간주한다.
  2. 열어본 상자가 아니라면 해당 원소값을 다음 확인할 인덱스로 정하며 해당 원소는 열어봤다는 의미로 0으로 바꾼다.
  3. 열어본 상자를 발견할 때까지 1~2를 반복하며 해당 작업의 수행 횟수를 저장한다.
  4. 열어본 상자를 발견하면 answer 변수에 이번 회차 작업 수행 횟수를 저장한다.
  5. 아직 안 열어본 상자에 대하여 위 작업을 반복 수행하여 모든 상자를 열어본다.
    • 모든 상자를 열어본 후 answer 변수에 저장된 숫자들은 각 그룹에 속하는 원소의 개수와 동일하다.
  6. answer 변수의 값 중 가장 큰 수와 두 번째로 큰 수를 곱하여 반환한다.

 

[코드]

def solution(cards):
    answer = []
    for i in range(len(cards)):
        tmp = 0
        while cards[i]:
            next_i = cards[i] - 1
            cards[i], i = 0, next_i
            tmp += 1
        answer.append(tmp)
    answer.sort()

    return answer[-1] * answer[-2]

댓글