3x 마을 사람들은 3을 저주의 숫자라고 생각하기 때문에 3의 배수와 숫자 3을 사용하지 않습니다. 3x 마을 사람들의 숫자는 다음과 같습니다.
| 10진법 | 3x 마을에서 쓰는 숫자 | 10진법 | 3x 마을에서 쓰는 숫자 |
|---|---|---|---|
| 1 | 1 | 6 | 8 |
| 2 | 2 | 7 | 10 |
| 3 | 4 | 8 | 11 |
| 4 | 5 | 9 | 14 |
| 5 | 7 | 10 | 16 |
정수 n이 매개변수로 주어질 때, n을 3x 마을에서 사용하는 숫자로 바꿔 return하도록 solution 함수를 완성해주세요.
1 ≤ n ≤ 100
| n | result |
|---|---|
| 15 | 25 |
| 40 | 76 |
입출력 예 #1
15를 3x 마을의 숫자로 변환하면 25입니다.
입출력 예 #2
40을 3x 마을의 숫자로 변환하면 76입니다.
def solution(n):
origin=[]
yes_3=[]
for i in range(1,n*3):
origin.append(i)
if i*3 < n*3+1:
yes_3.append(i*3)
if '3' in str(i):
yes_3.append(int(i))
no_3 = list(set(origin)-set(yes_3))
return no_3[n-1]
range(n*2)일 때 테스트 8이 시간초과라고 떠서 range(n*3)으로 고쳤더니 통과됐다. 제한사항이 1 ≤ n ≤ 100이기 때문인 것 같은데 이런 식으로 쓰는 건 비효율적이다.def solution(n):
answer = 0
no_3=[]
for i in range(n*3):
if not '3' in str(i) and i % 3 != 0:
no_3.append(int(i))
return no_3[n-1]
def solution(n):
answer = 0
for _ in range(n):
answer += 1
while answer % 3 == 0 or '3' in str(answer):
answer += 1
return answer
파이썬에서는 반복을 수행하되, 변수 값이 필요 없을 때 언더바(_)를 사용할 수 있다.
예를 들어, print 문을 반복시킬 때, 아래와 같이 변수 부분에 언더바를 적어주면, 변수 없이 반복문이 실행된다.for _ in range(5): print("Hello World")결과
Hello World Hello World Hello World Hello World Hello World이를 리스트 초기화에도 사용할 수 있다.
# 0으로 초기화 >> array = [ 0 for _ in range(10)] >> print(array) [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
def solution(n):
answer = 0
i = 1
while n:
if i % 3 and '3' not in str(i):
n -= 1
i += 1
answer = i - 1
return answer