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

Algorithm

(120)
[BOJ] μΆ”μ›” (#2002) 문제 λŒ€ν•œλ―Όκ΅­μ„ λΉ„λ‘―ν•œ λŒ€λΆ€λΆ„μ˜ λ‚˜λΌμ—μ„œλŠ” 터널 λ‚΄μ—μ„œμ˜ μ°¨μ„  변경을 법λ₯ λ‘œ κΈˆν•˜κ³  μžˆλ‹€. 쑰금만 κ΄€μ°°λ ₯이 μžˆλŠ” 학생이라면 터널 λ‚΄λΆ€μ—μ„œλŠ” 차선이 νŒŒμ„ μ΄ μ•„λ‹Œ μ‹€μ„ μœΌλ‘œ λ˜μ–΄ μžˆλ‹€λŠ” 것을 μ•Œκ³  μžˆμ„ 것이닀. μ΄λŠ” 차선을 λ³€κ²½ν•  수 μ—†μŒμ„ λ§ν•˜λŠ” 것이고, λ”°λΌμ„œ 터널 λ‚΄λΆ€μ—μ„œμ˜ 좔월은 λΆˆκ°€λŠ₯ν•˜λ‹€. μ†Œλ¬Έλ‚œ λͺ…μ½€λΉ„ κ²½μ°° λŒ€κ·Όμ΄μ™€ μ˜μ‹μ΄κ°€ μΆ”μ›”ν•˜λŠ” μ°¨λŸ‰μ„ 작기 μœ„ν•΄ ν•œ 터널에 νˆ¬μž…λ˜μ—ˆλ‹€. λŒ€κ·Όμ΄λŠ” ν„°λ„μ˜ μž…κ΅¬μ—, μ˜μ‹μ΄λŠ” ν„°λ„μ˜ μΆœκ΅¬μ— 각각 μž λ³΅ν•˜κ³ , λŒ€κ·Όμ΄λŠ” μ°¨κ°€ 터널에 λ“€μ–΄κ°€λŠ” μˆœμ„œλŒ€λ‘œ, μ˜μ‹μ΄λŠ” μ°¨κ°€ ν„°λ„μ—μ„œ λ‚˜μ˜€λŠ” μˆœμ„œλŒ€λ‘œ 각각 μ°¨λŸ‰ 번호λ₯Ό 적어 λ‘μ—ˆλ‹€. N개의 μ°¨λŸ‰μ΄ μ§€λ‚˜κ°„ ν›„, λŒ€κ·Όμ΄μ™€ μ˜μ‹μ΄λŠ” μžμ‹ λ“€μ΄ 적어 λ‘” μ°¨λŸ‰ 번호의 λͺ©λ‘μ„ 보고, 터널 λ‚΄λΆ€μ—μ„œ λ°˜λ“œμ‹œ 좔월을 ν–ˆμ„ κ²ƒμœΌλ‘œ μ—¬κ²¨μ§€λŠ” 차듀이 λͺ‡ λŒ€..
[Programmers] 두 개 λ½‘μ•„μ„œ λ”ν•˜κΈ° λ‚˜μ˜ μ½”λ“œ def solution(numbers): arr = [] for i in range(len(numbers)): for t in range(i+1,len(numbers)): arr.append(numbers[i] + numbers[t]) num = list(set(arr)) num.sort(reverse=False) return num 뢄석 > λ¬Έμ œλŠ” κ°„λ‹¨ν•œ λ¬Έμ œμ˜€λ‹€. λ‹€λ§Œ 쑰건을 꼼꼼히 보지 μ•Šμ•„ μ‹€μˆ˜λ₯Ό ν–ˆλ‹€. μ˜€λ¦„μ°¨μˆœμœΌλ‘œ μ •λ ¬ν•˜κΈ°μ™€ 같은 쑰건을 λ†“μΉ˜μ§€ 말자. μ½”λ”©ν…ŒμŠ€νŠΈ μ—°μŠ΅ - 두 개 λ½‘μ•„μ„œ λ”ν•˜κΈ° μ •μˆ˜ λ°°μ—΄ numbersκ°€ μ£Όμ–΄μ§‘λ‹ˆλ‹€. numbersμ—μ„œ μ„œλ‘œ λ‹€λ₯Έ μΈλ±μŠ€μ— μžˆλŠ” 두 개의 수λ₯Ό 뽑아 λ”ν•΄μ„œ λ§Œλ“€ 수 μžˆλŠ” λͺ¨λ“  수λ₯Ό 배열에 μ˜€λ¦„μ°¨μˆœμœΌλ‘œ λ‹΄μ•„ return ν•˜λ„λ‘ solution ..
[Programmers] μ•½μˆ˜μ˜ κ°œμˆ˜μ™€ λ§μ…ˆ λ‚˜μ˜ μ½”λ“œ def solution(left, right): k = 0 for i in range(left,right+1): cnt = 0 for j in range(1,right+1): if i % j == 0: cnt += 1 if cnt % 2 == 0: k += i else: k -= i return k μ½”λ”©ν…ŒμŠ€νŠΈ μ—°μŠ΅ - μ•½μˆ˜μ˜ κ°œμˆ˜μ™€ λ§μ…ˆ 두 μ •μˆ˜ left와 rightκ°€ λ§€κ°œλ³€μˆ˜λ‘œ μ£Όμ–΄μ§‘λ‹ˆλ‹€. leftλΆ€ν„° rightκΉŒμ§€μ˜ λͺ¨λ“  μˆ˜λ“€ μ€‘μ—μ„œ, μ•½μˆ˜μ˜ κ°œμˆ˜κ°€ 짝수인 μˆ˜λŠ” λ”ν•˜κ³ , μ•½μˆ˜μ˜ κ°œμˆ˜κ°€ ν™€μˆ˜μΈ μˆ˜λŠ” λΊ€ 수λ₯Ό return ν•˜λ„λ‘ solution ν•¨μˆ˜λ₯Ό μ™„μ„±ν•΄μ£Ό programmers.co.kr
[Programmers] 폰켓λͺ¬ 문제 당신은 폰켓λͺ¬μ„ 작기 μœ„ν•œ 였랜 μ—¬ν–‰ 끝에, 홍 λ°•μ‚¬λ‹˜μ˜ 연ꡬ싀에 λ„μ°©ν–ˆμŠ΅λ‹ˆλ‹€. 홍 λ°•μ‚¬λ‹˜μ€ λ‹Ήμ‹ μ—κ²Œ μžμ‹ μ˜ 연ꡬ싀에 μžˆλŠ” 총 N 마리의 폰켓λͺ¬ μ€‘μ—μ„œ N/2마리λ₯Ό 가져가도 μ’‹λ‹€κ³  ν–ˆμŠ΅λ‹ˆλ‹€. 홍 λ°•μ‚¬λ‹˜ μ—°κ΅¬μ‹€μ˜ 폰켓λͺ¬μ€ μ’…λ₯˜μ— 따라 번호λ₯Ό λΆ™μ—¬ κ΅¬λΆ„ν•©λ‹ˆλ‹€. λ”°λΌμ„œ 같은 μ’…λ₯˜μ˜ 폰켓λͺ¬μ€ 같은 번호λ₯Ό 가지고 μžˆμŠ΅λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄ 연ꡬ싀에 총 4마리의 폰켓λͺ¬μ΄ 있고, 각 폰켓λͺ¬μ˜ μ’…λ₯˜ λ²ˆν˜Έκ°€ [3번, 1번, 2번, 3번]이라면 μ΄λŠ” 3번 폰켓λͺ¬ 두 마리, 1번 폰켓λͺ¬ ν•œ 마리, 2번 폰켓λͺ¬ ν•œ λ§ˆλ¦¬κ°€ μžˆμŒμ„ λ‚˜νƒ€λƒ…λ‹ˆλ‹€. μ΄λ•Œ, 4마리의 폰켓λͺ¬ 쀑 2마리λ₯Ό κ³ λ₯΄λŠ” 방법은 λ‹€μŒκ³Ό 같이 6가지가 μžˆμŠ΅λ‹ˆλ‹€. 첫 번째(3번), 두 번째(1번) 폰켓λͺ¬μ„ 선택 첫 번째(3번), μ„Έ 번째(2번) 폰켓λͺ¬μ„ 선택 첫 번째..
[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) 간단..