λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

Algorithm/Programmers

(46)
[Programmers] 3진법 λ’€μ§‘κΈ° 문제 μ„€λͺ… μžμ—°μˆ˜ n이 λ§€κ°œλ³€μˆ˜λ‘œ μ£Όμ–΄μ§‘λ‹ˆλ‹€. n을 3진법 μƒμ—μ„œ μ•žλ’€λ‘œ 뒀집은 ν›„, 이λ₯Ό λ‹€μ‹œ 10μ§„λ²•μœΌλ‘œ ν‘œν˜„ν•œ 수λ₯Ό return ν•˜λ„λ‘ solution ν•¨μˆ˜λ₯Ό μ™„μ„±ν•΄μ£Όμ„Έμš”. λ‚˜μ˜ μ½”λ“œ def solution(n): p = 0 tmp = '' # μ›λž˜ μ‹€μ œ 3진법은 μ΅œμ’…μ μœΌλ‘œ λ’€μ§‘μ–΄μ•Ό ν•˜μ§€λ§Œ, μ—¬κΈ°μ„œλŠ” 뒀집은 수둜 10진법을 κ΅¬ν•˜κΈ° λ•Œλ¬Έμ— λ’€μ§‘μ§€ μ•ŠμŒ. while n: tmp += str(n % 3) n = n // 3 # 3진법 10μ§„λ²•μœΌλ‘œ λ³€ν™˜ int(tmp,3) μœΌλ‘œλ„ κ°€λŠ₯. for i in range(len(tmp),0,-1): if tmp[i-1] != '0': p += int(tmp[i-1]) * (3 ** (len(tmp) - i)) return p 뢄석 > 10μ§„μˆ˜λ₯Ό 3μ§„μˆ˜λ‘œ λ³€ν™˜ν•˜λŠ” ..
[Programmers] μ†Œμˆ˜ μ°ΎκΈ° 문제 ν•œμžλ¦¬ μˆ«μžκ°€ 적힌 쒅이 쑰각이 ν©μ–΄μ ΈμžˆμŠ΅λ‹ˆλ‹€. 흩어진 쒅이 쑰각을 λΆ™μ—¬ μ†Œμˆ˜λ₯Ό λͺ‡ 개 λ§Œλ“€ 수 μžˆλŠ”μ§€ μ•Œμ•„λ‚΄λ € ν•©λ‹ˆλ‹€. 각 쒅이 쑰각에 적힌 μˆ«μžκ°€ 적힌 λ¬Έμžμ—΄ numbersκ°€ μ£Όμ–΄μ‘Œμ„ λ•Œ, 쒅이 쑰각으둜 λ§Œλ“€ 수 μžˆλŠ” μ†Œμˆ˜κ°€ λͺ‡ κ°œμΈμ§€ return ν•˜λ„λ‘ solution ν•¨μˆ˜λ₯Ό μ™„μ„±ν•΄μ£Όμ„Έμš”. μ œν•œμ‚¬ν•­ numbersλŠ” 길이 1 이상 7 μ΄ν•˜μΈ λ¬Έμžμ—΄μž…λ‹ˆλ‹€. numbersλŠ” 0~9κΉŒμ§€ 숫자만으둜 이루어져 μžˆμŠ΅λ‹ˆλ‹€. "013"은 0, 1, 3 μˆ«μžκ°€ 적힌 쒅이 쑰각이 ν©μ–΄μ Έμžˆλ‹€λŠ” μ˜λ―Έμž…λ‹ˆλ‹€. μ½”λ“œ import itertools import math def solution(numbers): arr = [] answer = [] idx = 0 # numbers의 각 문자λ₯Ό ν™œμš©ν•΄μ„œ λ‚˜μ˜¬ 수 μžˆλŠ” λͺ¨λ“  순..
[Programmers] λ‹€μŒ 큰 숫자 문제 μžμ—°μˆ˜ n이 μ£Όμ–΄μ‘Œμ„ λ•Œ, n의 λ‹€μŒ 큰 μˆ«μžλŠ” λ‹€μŒκ³Ό 같이 μ •μ˜ ν•©λ‹ˆλ‹€. 쑰건 1. n의 λ‹€μŒ 큰 μˆ«μžλŠ” n보닀 큰 μžμ—°μˆ˜ μž…λ‹ˆλ‹€. 쑰건 2. n의 λ‹€μŒ 큰 μˆ«μžμ™€ n은 2μ§„μˆ˜λ‘œ λ³€ν™˜ν–ˆμ„ λ•Œ 1의 κ°―μˆ˜κ°€ κ°™μŠ΅λ‹ˆλ‹€. 쑰건 3. n의 λ‹€μŒ 큰 μˆ«μžλŠ” 쑰건 1, 2λ₯Ό λ§Œμ‘±ν•˜λŠ” 수 쀑 κ°€μž₯ μž‘μ€ 수 μž…λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄μ„œ 78(1001110)의 λ‹€μŒ 큰 μˆ«μžλŠ” 83(1010011)μž…λ‹ˆλ‹€. μžμ—°μˆ˜ n이 λ§€κ°œλ³€μˆ˜λ‘œ μ£Όμ–΄μ§ˆ λ•Œ, n의 λ‹€μŒ 큰 숫자λ₯Ό return ν•˜λŠ” solution ν•¨μˆ˜λ₯Ό μ™„μ„±ν•΄μ£Όμ„Έμš”. μ œν•œ 사항 n은 1,000,000 μ΄ν•˜μ˜ μžμ—°μˆ˜ μž…λ‹ˆλ‹€. λ‚˜μ˜ μ½”λ“œ def solution(n): p = str(bin(n)) while p.count('1') != str(bin(n+1)).count('1')..
[Programmers] μ‹ κ·œ 아이디 μΆ”μ²œ λ‚˜μ˜ μ½”λ“œ def solution(new_id): word = '' new_word = [] # 1단계 new_id = new_id.lower() # 2단계 for i in new_id: if i.isalpha() or i.isdigit() or i in ['-','_','.']: word += i # 3단계 while '..' in word: word = word.replace('..','.') # 4단계 word = word.strip('.') # 5단계 if len(word) == 0: word += 'a' # 6단계 if len(word) >= 16: word = word[:15] if word[-1] == '.': word = word.rstrip('.') # 7단계 if len(word) 간단..
[Programmers] μ˜μ–΄ λλ§μž‡κΈ° 문제 1λΆ€ν„° nκΉŒμ§€ λ²ˆν˜Έκ°€ λΆ™μ–΄μžˆλŠ” nλͺ…μ˜ μ‚¬λžŒμ΄ μ˜μ–΄ λλ§μž‡κΈ°λ₯Ό ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. μ˜μ–΄ λλ§μž‡κΈ°λŠ” λ‹€μŒκ³Ό 같은 κ·œμΉ™μœΌλ‘œ μ§„ν–‰λ©λ‹ˆλ‹€. 1λ²ˆλΆ€ν„° 번호 μˆœμ„œλŒ€λ‘œ ν•œ μ‚¬λžŒμ”© μ°¨λ‘€λŒ€λ‘œ 단어λ₯Ό λ§ν•©λ‹ˆλ‹€. λ§ˆμ§€λ§‰ μ‚¬λžŒμ΄ 단어λ₯Ό λ§ν•œ λ‹€μŒμ—λŠ” λ‹€μ‹œ 1λ²ˆλΆ€ν„° μ‹œμž‘ν•©λ‹ˆλ‹€. μ•žμ‚¬λžŒμ΄ λ§ν•œ λ‹¨μ–΄μ˜ λ§ˆμ§€λ§‰ 문자둜 μ‹œμž‘ν•˜λŠ” 단어λ₯Ό 말해야 ν•©λ‹ˆλ‹€. 이전에 λ“±μž₯ν–ˆλ˜ λ‹¨μ–΄λŠ” μ‚¬μš©ν•  수 μ—†μŠ΅λ‹ˆλ‹€. ν•œ κΈ€μžμΈ λ‹¨μ–΄λŠ” μΈμ •λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λ‹€μŒμ€ 3λͺ…이 λλ§μž‡κΈ°λ₯Ό ν•˜λŠ” 상황을 λ‚˜νƒ€λƒ…λ‹ˆλ‹€. tank β†’ kick β†’ know β†’ wheel β†’ land β†’ dream β†’ mother β†’ robot β†’ tank μœ„ λλ§μž‡κΈ°λŠ” λ‹€μŒκ³Ό 같이 μ§„ν–‰λ©λ‹ˆλ‹€. 1번 μ‚¬λžŒμ΄ μžμ‹ μ˜ 첫 번째 차둀에 tankλ₯Ό λ§ν•©λ‹ˆλ‹€. 2번 μ‚¬λžŒμ΄ μžμ‹ μ˜ 첫 번째 차둀에 kic..
[Programmers] μ†Œμˆ˜ λ§Œλ“€κΈ° 문제 μ£Όμ–΄μ§„ 숫자 쀑 3개의 수λ₯Ό λ”ν–ˆμ„ λ•Œ μ†Œμˆ˜κ°€ λ˜λŠ” 경우의 개수λ₯Ό κ΅¬ν•˜λ €κ³  ν•©λ‹ˆλ‹€. μˆ«μžλ“€μ΄ λ“€μ–΄μžˆλŠ” λ°°μ—΄ numsκ°€ λ§€κ°œλ³€μˆ˜λ‘œ μ£Όμ–΄μ§ˆ λ•Œ, nums에 μžˆλŠ” μˆ«μžλ“€ 쀑 μ„œλ‘œ λ‹€λ₯Έ 3개λ₯Ό 골라 λ”ν–ˆμ„ λ•Œ μ†Œμˆ˜κ°€ λ˜λŠ” 경우의 개수λ₯Ό return ν•˜λ„λ‘ solution ν•¨μˆ˜λ₯Ό μ™„μ„±ν•΄μ£Όμ„Έμš”.μ œν•œμ‚¬ν•­ μ œν•œ 사항 nums에 λ“€μ–΄μžˆλŠ” 숫자의 κ°œμˆ˜λŠ” 3개 이상 50개 μ΄ν•˜μž…λ‹ˆλ‹€. nums의 각 μ›μ†ŒλŠ” 1 이상 1,000 μ΄ν•˜μ˜ μžμ—°μˆ˜μ΄λ©°, μ€‘λ³΅λœ μˆ«μžκ°€ λ“€μ–΄μžˆμ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λ‚˜μ˜ μ½”λ“œ def solution(nums): cnt = 0 arr = [] # 숫자 μ„Έ 개λ₯Ό λ”ν•΄μ„œ λ‚˜μ˜¬ 수 μžˆλŠ” λͺ¨λ“  경우의 수λ₯Ό 담은 λ°°μ—΄ λ§Œλ“€κΈ° for i in range(len(nums)): for t in range(i+1,len(n..
[Programmers] νŠœν”Œ 문제 μ…€μˆ˜μžˆλŠ” μˆ˜λŸ‰μ˜ μˆœμ„œμžˆλŠ” μ—΄κ±° λ˜λŠ” μ–΄λ–€ μˆœμ„œλ₯Ό λ”°λ₯΄λŠ” μš”μ†Œλ“€μ˜ λͺ¨μŒμ„ νŠœν”Œ(tuple)이라고 ν•©λ‹ˆλ‹€. n개의 μš”μ†Œλ₯Ό κ°€μ§„ νŠœν”Œμ„ n-νŠœν”Œ(n-tuple)이라고 ν•˜λ©°, λ‹€μŒκ³Ό 같이 ν‘œν˜„ν•  수 μžˆμŠ΅λ‹ˆλ‹€. (a1, a2, a3, ..., an) νŠœν”Œμ€ λ‹€μŒκ³Ό 같은 μ„±μ§ˆμ„ κ°€μ§€κ³  μžˆμŠ΅λ‹ˆλ‹€. μ€‘λ³΅λœ μ›μ†Œκ°€ μžˆμ„ 수 μžˆμŠ΅λ‹ˆλ‹€. ex : (2, 3, 1, 2) μ›μ†Œμ— μ •ν•΄μ§„ μˆœμ„œκ°€ 있으며, μ›μ†Œμ˜ μˆœμ„œκ°€ λ‹€λ₯΄λ©΄ μ„œλ‘œ λ‹€λ₯Έ νŠœν”Œμž…λ‹ˆλ‹€. ex : (1, 2, 3) β‰  (1, 3, 2) νŠœν”Œμ˜ μ›μ†Œ κ°œμˆ˜λŠ” μœ ν•œν•©λ‹ˆλ‹€. μ›μ†Œμ˜ κ°œμˆ˜κ°€ n개이고, μ€‘λ³΅λ˜λŠ” μ›μ†Œκ°€ μ—†λŠ” νŠœν”Œ (a1, a2, a3, ..., an)이 μ£Όμ–΄μ§ˆ λ•Œ(단, a1, a2, ..., an은 μžμ—°μˆ˜), μ΄λŠ” λ‹€μŒκ³Ό 같이 μ§‘ν•© 기호 '{', '}'λ₯Ό 이..
[Programmers] 크레인 μΈν˜•λ½‘κΈ° κ²Œμž„ λ‚˜μ˜ μ½”λ“œ def solution(board, moves): stack = [] answer = [] imp = [] cnt = 0 # λΉˆμΉΈμ„ μ œμ™Έν•˜μ—¬ 남은 μΈν˜•λ§Œ 남긴 μƒˆλ‘œμš΄ λ°°μ—΄ λ§Œλ“ λ‹€. for i in range(len(board)): for t in range(len(board)): if board[t][i] != 0: stack.append(board[t][i]) stack.reverse() answer.append(stack) stack = [] # μΈν˜•μ„ μƒˆλ‘œμš΄ λ°”κ΅¬λ‹ˆμ— λ„£μœΌλ©΄μ„œ λ§ˆμ§€λ§‰ μ›μ†Œμ™€ κ·Έ μ „ μ›μ†Œκ°€ κ°™μœΌλ©΄ pop μ‹œν‚¨λ‹€. # cnt λŠ” μΈν˜•μ΄ μ‚¬λΌμ§€λŠ” 횟수이기 λ•Œλ¬Έμ— 사라진 μΈν˜•μ˜ κ°œμˆ˜λŠ” 이 κ°’μ˜ 2배이닀. for l in moves: if len(answer[l-1]) > 0: i..