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에 추가한다.
[Python] Programmers lv1 두 개 뽑아서 더하기, 문자열 내 마음대로 정렬하기 (0) | 2021.05.25 |
---|---|
[Python] Programmers lv1 포켓몬, 음양 더하기, 로또의 최고 순위와 최저 순위 (0) | 2021.05.22 |
[Python] Programmers lv1 이상한 문자 만들기, 행렬의 덧셈, 예산 (0) | 2021.05.16 |
[Python] Programmers lv1 제일 작은 수 제거하기, 정수 내림차순으로 배치하기, 최대공약수와 최소공배수 (0) | 2021.05.15 |
[Python] Programmers lv1 콜라츠 추측, 정수 제곱근 판별, 자연수 뒤집어 배열로 만들기, x만큼 간격이 있는 n개의 숫자 (0) | 2021.05.14 |
댓글 영역