250x250
Link
λ‚˜μ˜ GitHub Contribution κ·Έλž˜ν”„
Loading data ...
Notice
Recent Posts
Recent Comments
관리 메뉴

Data Science LAB

[Python] ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€ μ½”λ”©ν…ŒμŠ€νŠΈ μ—°μŠ΅ level2 (nμ§„μˆ˜ κ²Œμž„) λ³Έλ¬Έ

πŸ“ Coding Test/Programmers

[Python] ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€ μ½”λ”©ν…ŒμŠ€νŠΈ μ—°μŠ΅ level2 (nμ§„μˆ˜ κ²Œμž„)

γ…… γ…œ γ…” γ…‡ 2022. 11. 6. 03:07
728x90

1. 문제 μ„€λͺ…

νŠœλΈŒκ°€ ν™œλ™ν•˜λŠ” μ½”λ”© λ™μ•„λ¦¬μ—μ„œλŠ” μ „ν†΅μ μœΌλ‘œ ν•΄μ˜€λŠ” κ²Œμž„μ΄ μžˆλ‹€. 이 κ²Œμž„μ€ μ—¬λŸ¬ μ‚¬λžŒμ΄ λ‘₯κΈ€κ²Œ μ•‰μ•„μ„œ 숫자λ₯Ό ν•˜λ‚˜μ”© μ°¨λ‘€λŒ€λ‘œ λ§ν•˜λŠ” κ²Œμž„μΈλ°, κ·œμΉ™μ€ λ‹€μŒκ³Ό κ°™λ‹€.

  1. 숫자λ₯Ό 0λΆ€ν„° μ‹œμž‘ν•΄μ„œ μ°¨λ‘€λŒ€λ‘œ λ§ν•œλ‹€. 첫 번째 μ‚¬λžŒμ€ 0, 두 번째 μ‚¬λžŒμ€ 1, … μ—΄ 번째 μ‚¬λžŒμ€ 9λ₯Ό λ§ν•œλ‹€.
  2. 10 μ΄μƒμ˜ μˆ«μžλΆ€ν„°λŠ” ν•œ μžλ¦¬μ”© λŠμ–΄μ„œ λ§ν•œλ‹€. 즉 μ—΄ν•œ 번째 μ‚¬λžŒμ€ 10의 첫 자리인 1, 열두 번째 μ‚¬λžŒμ€ λ‘˜μ§Έ 자리인 0을 λ§ν•œλ‹€.

μ΄λ ‡κ²Œ κ²Œμž„μ„ 진행할 경우,
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 1, 0, 1, 1, 1, 2, 1, 3, 1, 4, …
순으둜 숫자λ₯Ό λ§ν•˜λ©΄ λœλ‹€.

ν•œνŽΈ μ½”λ”© 동아리 일원듀은 컴퓨터λ₯Ό λ‹€λ£¨λŠ” μ‚¬λžŒλ‹΅κ²Œ μ΄μ§„μˆ˜λ‘œ 이 κ²Œμž„μ„ μ§„ν–‰ν•˜κΈ°λ„ ν•˜λŠ”λ°, 이 κ²½μš°μ—λŠ”
0, 1, 1, 0, 1, 1, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, …
순으둜 숫자λ₯Ό λ§ν•˜λ©΄ λœλ‹€.

μ΄μ§„μˆ˜λ‘œ μ§„ν–‰ν•˜λŠ” κ²Œμž„μ— μ΅μˆ™ν•΄μ Έ μ§ˆλ €κ°€λ˜ μ‚¬λžŒλ“€μ€ μ’€ 더 λ‚œμ΄λ„λ₯Ό 높이기 μœ„ν•΄ μ΄μ§„λ²•μ—μ„œ μ‹­μœ‘μ§„λ²•κΉŒμ§€ λͺ¨λ“  μ§„λ²•μœΌλ‘œ κ²Œμž„μ„ μ§„ν–‰ν•΄λ³΄κΈ°λ‘œ ν–ˆλ‹€. 숫자 κ²Œμž„μ΄ μ΅μˆ™ν•˜μ§€ μ•Šμ€ νŠœλΈŒλŠ” κ²Œμž„μ— μ Έμ„œ λ²ŒμΉ™μ„ λ°›λŠ” κ΅΄μš•μ„ ν”Όν•˜κΈ° μœ„ν•΄, μžμ‹ μ΄ 말해야 ν•˜λŠ” 숫자λ₯Ό μŠ€λ§ˆνŠΈν°μ— 미리 좜λ ₯ν•΄μ£ΌλŠ” ν”„λ‘œκ·Έλž¨μ„ λ§Œλ“€λ €κ³  ν•œλ‹€. 튜브의 ν”„λ‘œκ·Έλž¨μ„ κ΅¬ν˜„ν•˜λΌ.

 

 

 

 

 

 

 

 

2. λ‚΄ 풀이

def convert(n, base):
    T = "0123456789ABCDEF"
    q, r = divmod(n, base)
    if q == 0:
        return T[r]
    else:
        return convert(q, base) + T[r]
    
def solution(n, t, m, p):
    answer = ''
    tube = [p+x*m-1 for x in range(t)]
    numbers = ''
    for i in range(t*m):
        num = convert(i,n)
        numbers += num
        if len(numbers) >= tube[-1]+1:
            break
    answer = [numbers[x] for x in tube]
    return ''.join(answer)

 

1. 10μ§„μˆ˜λ₯Ό nμ§„μˆ˜λ‘œ λ³€ν™˜ν•΄μ£ΌλŠ” ν•¨μˆ˜μΈ convert() μ„ μ–Έ

2. νŠœλΈŒκ°€ 말해야 ν•˜λŠ” 숫자의 μˆœμ„œλ₯Ό list둜 μ„ μ–Έ

3. 0λΆ€ν„° μ‹œμž‘ν•˜μ—¬ 각 숫자λ₯Ό nμ§„μˆ˜λ‘œ λ³€ν™˜ν•˜μ—¬ numbers λ¬Έμžμ—΄μ— μΆ”κ°€

4. νŠœλΈŒκ°€ μ™Έμ³μ•Όν•˜λŠ” λ§ˆμ§€λ§‰ μˆœμ„œλ³΄λ‹€ numbersλ¬Έμžμ—΄μ΄ 길어지면 break (μ‹œκ°„ κ°μ†Œ)

 

 

def solution(n, t, m, p):
    data = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F"]
    numbers = "0"
    for number in range(1, t*m):
        temp = []
        while number > 0:
            temp.append(data[number%n])
            number //= n
        numbers += "".join(reversed(temp))

    return numbers[p-1:t*m:m]

 

 

728x90
Comments