Coding Test/[Python] Programmers lv1

[Python] Programmers lv1 포켓몬, 음양 더하기, 로또의 최고 순위와 최저 순위

winCow 2021. 5. 22. 00:03

1. 포켓몬

def solution(nums):
    answer = 0
    species = []
    for num in nums:
        if num not in species:
            species.append(num);
    if len(species) <= len(nums)//2:
        answer = len(species)
    else:
        answer = len(nums)//2
    return answer

빈 배열을 하나 만들고, 주어진 배열 nums의 모든 원소를 확인해 빈 배열에 없는 원소만을 추가한다. 이렇게 하면 species 배열은 모든 종류의 숫자가 각각 한 번씩만 들어 있는 배열이 된다. 이 배열의 길이, 즉 숫자의 종류 중에서, 최대 절반만 가져갈 수 있으므로, species 배열의 길이가 주어진 배열의 길이의 절반보다 클 때, 작거나 같을 때로 나누어 생각할 수 있다. 주어진 배열의 길이의 절반보다 크다면, 가져갈 수 있는 최대한의 숫자, 즉 주어진 배열의 길이의 절반 만큼을 가져갈 수 있다. 절반보다 작거나 같다면, 주어진 종류만큼의 숫자를 가져갈 수 있다.

 

 

2. 음양 더하기

def solution(absolutes, signs):
    integers = []
    for num in range(0, len(absolutes)):
        if signs[num] == True:
            integers.append(absolutes[num])
        else:
            integers.append(-1 * absolutes[num])
    answer = sum(integers)
    return answer

주어진 절댓값과 불리언 배열을 조합하여 정수를 만들고 이 값들을 더한다. 절댓값의 모든 원소에 대해, 각각의 인덱스에 대응하는 불리언 값에 따라 양수와 음수를 결정하고, 이를 sum으로 더해 준다.

 

 

3. 로또의 최고 순위와 최저 순위

def solution(lottos, win_nums):
    zero = []
    not_zero = []
    for number in lottos:
        if number == 0:
            zero.append(number)
        else:
            if number in win_nums:
                not_zero.append(number)
    min = len(not_zero)
    max = len(not_zero) + len(zero)
    if min == 0:
        min_class = 6
    else:
        min_class = 7-min
    if max == 0:
        max_class = 6
    else:
        max_class = 7-max
    answer = [max_class, min_class]
    return answer

최저 순위는 보이지 않는 숫자 0이 모두 틀리는 경우이고, 최고 순위는 모두 맞는 경우이다. 그러므로 먼저, 뽑은 숫자들 중에서 0의 개수를 파악하고, 이후 당첨 번호와 맞는 숫자의 개수를 파악한다. 가장 적게 맞춘 경우는 0이 모두 틀렸으므로, min은 not_zero의 개수가 되고, 가장 많이 맞춘 경우는 not_zero뿐만 아니라, zero의 개수까지 더한 결과이다. 이를 맞춘 갯수에 따라 등수로 나타내기 위해서 7에서min, max를 빼 주며, 0개를 맞춘 경우는 1개를 맞춘 것과 동일하게 6등이므로 따로 표기해 준다.