상세 컨텐츠

본문 제목

[Python] Programmers lv1 3진법 뒤집기, 체육복

Coding Test/[Python] Programmers lv1

by winCow 2021. 5. 25. 09:57

본문

1. 3진법 뒤집기

def solution(n):
    answer = 0
    trinary = []
    while n > 0:
        remainder = n % 3
        trinary.append(remainder)
        n = n // 3
    trinary.reverse()
    for i in range(len(trinary)):
        answer += trinary[i] * (3**i)
    return answer

십진법을 n진법으로 변환하는 방법을 알면 된다. 십진수 n을 3진법으로 나타낼 때, n을 3으로 나눈 나머지가 3진수의 첫 번째 자리 숫자가 된다. 몫은 다시 3으로 나누고, 그 나머지는 다시 3진수의 두 번째 자리 숫자가 된다. 이를 3으로 더이상 나누어지지 않을 때까지 반복하면 된다. 이를 통해 구한 3진수의 각 자리 숫자들을 reverse()로 순서를 바꾼 뒤, 다시 십진법으로 나타내기 위해 3의 i제곱을 곱하고 더한다.

 

 

2. 체육복

def solution(n, lost, reserve):
    abandoned = 0
    lost_but_reserve = []
    for i in lost:
        if i in reserve:
            lost_but_reserve.append(i)
    for i in lost_but_reserve:
        if i in lost_but_reserve:
            reserve.remove(i)
            lost.remove(i)
    for i in lost:
        if i-1 in reserve:
            reserve.remove(i-1)
        elif i+1 in reserve:
            reserve.remove(i+1)
        else:
            abandoned += 1
    answer = n - abandoned
    return answer

체육복을 못 입는 학생의 수를 abandoned라고 하여 전체 학생 수에서 빼 줄 것이다. 먼저 옷을 도둑맞았으나 여벌의 옷을 가지고 온 학생들을 보낸다. 이후, 나머지 도둑맞은 학생들 중, 자신의 앞, 뒤 번호에 여벌의 옷을 가진 학생이 있다면 이를 빌려 입고 가고, 그렇지 않은 경우에 abandoned에 추가한다.

관련글 더보기

댓글 영역