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

🐍 Python/solve-algorithm

(9)
ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€ ν•΄μ‹œ [μ™„μ£Όν•˜μ§€ λͺ»ν•œ μ„ μˆ˜] : 파이썬 이제 슬슬 λ°±μ€€ νƒˆμΆœν•˜κ³  ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€λ₯Ό κ²Έν•  λ•Œκ°€ μ™”λ‹€. μ›λž˜λŠ” λ°±μ€€ κ³¨λ“œ5 찍으면 λ„˜μ–΄κ°ˆ κ³„νšμ΄μ—ˆμœΌλ‚˜ 1. μš”μ¦˜ 1일1컀밋도 μ˜ˆμ „λ§ŒνΌ λͺ»ν•˜κ³  μžˆμ–΄μ„œ 진도가 영 μ•ˆ λ‚˜κ³  2. λ‚΄κ°€ μ§€μ›ν–ˆλ˜ 기업은 μ½”ν…Œλ₯Ό ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€λ₯Ό ν™œμš©ν•˜μ—¬ μ‘μ‹œν•  수 μžˆμ–΄μ„œ μ μ‘ν•˜κ³ μž λ³‘λ ¬μ μœΌλ‘œ μ§„ν–‰ν•˜κΈ°λ‘œ ν–ˆλ‹€. (사싀 ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€ 포비아(?)κ°€ μžˆμ—ˆλ‹€.. κ·Ήλ³΅ν•΄λ³΄μžκ³ !) πŸ“Ž Problem https://school.programmers.co.kr/learn/courses/30/lessons/42576 ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€ μ½”λ“œ μ€‘μ‹¬μ˜ 개발자 μ±„μš©. μŠ€νƒ 기반의 ν¬μ§€μ…˜ 맀칭. ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€μ˜ 개발자 λ§žμΆ€ν˜• ν”„λ‘œν•„μ„ λ“±λ‘ν•˜κ³ , λ‚˜μ™€ 기술 ꢁ합이 잘 λ§žλŠ” 기업듀을 맀칭 λ°›μœΌμ„Έμš”. programmers.co.kr πŸ“Ž Solution μ•Œκ³ λ¦¬μ¦˜ 문제λ₯Ό..
λ°±μ€€ 3460 [μ΄μ§„μˆ˜] : 4가지 풀이 방법과 μ΄μ§„μˆ˜ κ΅¬ν•˜λŠ” ν•¨μˆ˜ κ΅¬ν˜„ν•˜κΈ° πŸ“Ž Problem https://www.acmicpc.net/problem/3460 3460번: μ΄μ§„μˆ˜ μ–‘μ˜ μ •μˆ˜ n이 μ£Όμ–΄μ‘Œμ„ λ•Œ, 이λ₯Ό μ΄μ§„μˆ˜λ‘œ λ‚˜νƒ€λƒˆμ„ λ•Œ 1의 μœ„μΉ˜λ₯Ό λͺ¨λ‘ μ°ΎλŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜μ‹œμ˜€. μ΅œν•˜μœ„ λΉ„νŠΈ(least significant bit, lsb)의 μœ„μΉ˜λŠ” 0이닀. www.acmicpc.net πŸ“Ž Solution μ•Œκ³ λ¦¬μ¦˜ 문제 ν’€μ΄μ—μ„œ 개인적으둜 κ°€μž₯ μ€‘μš”ν•˜κ²Œ μƒκ°ν•˜λŠ” 것은 λ‹€μ–‘ν•œ λ°©λ²•μœΌλ‘œ μ ‘κ·Όν•˜λŠ” 것이닀. ν•œ 문제λ₯Ό 풀더라도, 1가지 λ°©μ•ˆμœΌλ‘œ ν’€μ΄ν–ˆλ‹€κ³  λλ‚˜λŠ” 것이 μ•„λ‹ˆλΌ μ—¬λŸ¬ 번의 μ‹œλ„μ™€ 고민을 톡해 μ„±μž₯ν•  수 μžˆλ‹€. πŸ’ͺ 1️⃣ case 1 κ°€μž₯ λ¨Όμ € ν’€μ΄ν•œ λ°©λ²•μœΌλ‘œ 파이썬의 λ‚΄μž₯ν•¨μˆ˜ bin을 ν™œμš©ν•˜μ˜€λ‹€. bin ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜λ©΄ μ•žμ— '0b'λΌλŠ” λ¬Έμžκ°€ ν¬ν•¨λœ string ν˜•μ‹..
λ°±μ€€ 1065 [ν•œμˆ˜] : 파이썬 (브루트포슀 μ•Œκ³ λ¦¬μ¦˜(Brute-force search)) πŸ“Ž Problem https://www.acmicpc.net/problem/1065 1065번: ν•œμˆ˜ μ–΄λ–€ μ–‘μ˜ μ •μˆ˜ X의 각 μžλ¦¬κ°€ λ“±μ°¨μˆ˜μ—΄μ„ 이룬닀면, κ·Έ 수λ₯Ό ν•œμˆ˜λΌκ³  ν•œλ‹€. λ“±μ°¨μˆ˜μ—΄μ€ μ—°μ†λœ 두 개의 수의 차이가 μΌμ •ν•œ μˆ˜μ—΄μ„ λ§ν•œλ‹€. N이 μ£Όμ–΄μ‘Œμ„ λ•Œ, 1보닀 ν¬κ±°λ‚˜ κ°™κ³ , N보닀 μž‘κ±°λ‚˜ www.acmicpc.net πŸ“Ž Submission Code 두 가지 λ°©λ²•μœΌλ‘œ 풀이λ₯Ό ν•΄λ³΄μ•˜λŠ”λ°, κ²°λ‘ μ μœΌλ‘œλŠ” λ©”λͺ¨λ¦¬λŠ” 30864KB둜 λ™μΌν•˜μ˜€κ³  μ‹œκ°„μ€ 68ms λ˜λŠ” 72ms둜 λΉ„μŠ·ν•˜μ˜€λ‹€. 1 ) 전체 - ν•œμˆ˜κ°€ μ•„λ‹Œ 수 λΉΌκΈ° ν•œ 자리 수인 1~9λŠ” μˆ˜μ—΄μ˜ 길이가 1인 λ“±μ°¨μˆ˜μ—΄λ‘œ, 두 자리 수인 10~99λŠ” 길이가 2인 λ“±μ°¨μˆ˜μ—΄λ‘œ λ³Έλ‹€. 이해가 잘 가지 μ•ŠλŠ”λ‹€λ©΄ μ—¬κΈ°λ₯Ό ν΄λ¦­ν•΄μ„œ μ°Έκ³ ν•˜λ©΄ 쒋을 것 κ°™λ‹€. 따라..
μœ ν΄λ¦¬λ“œ ν˜Έμ œλ²•κ³Ό μž¬κ·€ν•¨μˆ˜ : λ°±μ€€ 2609[μ΅œλŒ€κ³΅μ•½μˆ˜μ™€ μ΅œμ†Œκ³΅λ°°μˆ˜] & 파이썬 였늘 μž¬κ·€ ν•¨μˆ˜λ₯Ό κ³΅λΆ€ν•˜λ©΄μ„œ 전에 ν’€μ—ˆλ˜ λ°±μ€€ λ¬Έμ œκ°€ 생각이 λ‚˜μ„œ 같이 μ •λ¦¬ν•΄λ³΄κ³ μž 가지고 μ™”λ‹€. πŸ” μž¬κ·€ν•¨μˆ˜(Recursion Function) μ‰½κ²Œ λ§ν•˜λ©΄, 자기 μžμ‹ μ„ ν˜ΈμΆœν•˜λŠ” ν•¨μˆ˜. μžμ„Έν•œ μ„€λͺ…은 μž¬κ·€ν•¨μˆ˜ μœ„ν‚€ν”Όλ””μ•„ μ°Έκ³  μˆ˜ν•™μ  귀납법과 λΉ„μŠ·ν•¨ μ‹€μ²΄ν•˜μ§€ μ•ŠλŠ” κ°œλ…μ„ μˆ˜ν•™μ  λͺ¨λΈλ‘œ λ§Œλ“€κ³ , κ·Έ μˆ˜ν•™μ  λͺ¨λΈμ„ ν•˜λ‚˜μ”© μ°¨κ°μ‹œμΌœκ°€λ©΄μ„œ ν˜ΈμΆœν•˜λŠ” κ²ƒλ§ŒμœΌλ‘œλ„ λ¬Έμ œκ°€ ν•΄κ²°λ˜κ²Œ ν•˜λŠ” 것 1 ) μž¬κ·€ν•¨μˆ˜μ˜ ν™œμš© μž¬κ·€μ μœΌλ‘œ 문제λ₯Ό ν‘Όλ‹€λŠ” 것 : 같은 ν˜•νƒœμ˜ 더 μž‘μ€ 문제λ₯Ό ν’€κ³ , λΆ€λΆ„ 문제의 닡을 μ΄μš©ν•΄μ„œ κΈ°μ‘΄ 문제λ₯Ό ν‘ΈλŠ” 것! μž¬κ·€μ μœΌλ‘œ ν’€κΈ° μœ„ν•΄μ„œλŠ” 항상 μ•„λž˜μ™€ 같이 두 caseλ₯Ό λ‚˜λˆ„μ–΄μ„œ μƒκ°ν•΄μ•Όν•œλ‹€. Base case: 이미 λ¬Έμ œκ°€ μΆ©λΆ„νžˆ μž‘μ•„μ„œ, 더 μž‘μ€ λΆ€λΆ„ 문제둜 λ‚˜λˆ„μ§€ μ•Šκ³ λ„ λ°”λ‘œ 닡을 μ•Œ 수 μžˆλŠ” κ²½..
브루트포슀(Brute-force search) : λ°±μ€€ 14719 [λΉ—λ¬Ό] & 파이썬 브루트포슀 μ•Œκ³ λ¦¬μ¦˜μ„ κ³΅λΆ€ν•˜λ©΄μ„œ, λ°±μ€€ λ¬Έμ œμ—λ„ μ μš©μ„ ν•΄λ³΄μ•˜μŠ΅λ‹ˆλ‹€! πŸ‘€ 반볡 μˆ™λ‹¬μ„ 톡해 λ”μš± μ΅μˆ™ν•΄μ§€μž! πŸ† 참고둜 ν•΄λ‹Ή λ¬Έμ œλŠ” leet_codeμ—μ„œλ„ 찾을 수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€. ν•΄λ‹Ή λ¬Έμ œλ„ μ—…λ°μ΄νŠΈν•΄λ³΄κ² μŠ΅λ‹ˆλ‹€. μ£Όμ†ŒλŠ” 제일 μ•„λž˜ reference에 μΆ”κ°€ν•˜κ² μŠ΅λ‹ˆλ‹€. πŸ” Brute-force search κ·ΈλŒ€λ‘œ ν•΄μ„ν•˜λ©΄ "무차별 λŒ€μž… 검색" 의미 κ·ΈλŒ€λ‘œ, λ¬΄μ°¨λ³„μ μœΌλ‘œ κ°€λŠ₯ν•œ λͺ¨λ“  경우의 수λ₯Ό μ‹œλ„ν•΄ λ³΄λŠ” μ•Œκ³ λ¦¬μ¦˜ κ°€μž₯ μˆœμ§„ν•œ μ•Œκ³ λ¦¬μ¦˜ 접근법 예λ₯Ό λ“€μ–΄, λΉ„λ°€λ²ˆν˜Έ 4자리 μžλ¬Όμ‡ κ°€ μžˆλ‹€κ³  ν•˜λ©΄, 0000λΆ€ν„° 9999κΉŒμ§€ 전체λ₯Ό λ‹€ ν™•μΈν•˜λŠ” 것! μ΄λ―Έμ§€λŠ” μ—¬κΈ°μ—μ„œ 가지고 μ™”μŠ΅λ‹ˆλ‹€. πŸ‘ μž₯점 직관적이고 λͺ…ν™•ν•˜λ‹€ 닡을 ν™•μ‹€ν•˜κ²Œ 찾을 수 μžˆλ‹€ 😡‍πŸ’« 단점 λͺ¨λ“  경우λ₯Ό 보기 λ•Œλ¬Έμ— λΉ„νš¨μœ¨μ μž„ ➑️ 인풋이 컀질수둝 λΉ„νš¨μœ¨..
λ°±μ€€ 1929[μ†Œμˆ˜ κ΅¬ν•˜κΈ°] : 파이썬 & μ‹œκ°„μ΄ˆκ³Ό 해결방법 & μ†Œμˆ˜ νŒμ •, μ—λΌν† μŠ€ν…Œλ„€μŠ€μ˜ 체 πŸ“Ž Problem https://www.acmicpc.net/problem/1929 1929번: μ†Œμˆ˜ κ΅¬ν•˜κΈ° 첫째 쀄에 μžμ—°μˆ˜ Mκ³Ό N이 빈 칸을 사이에 두고 주어진닀. (1 ≤ M ≤ N ≤ 1,000,000) M이상 Nμ΄ν•˜μ˜ μ†Œμˆ˜κ°€ ν•˜λ‚˜ 이상 μžˆλŠ” μž…λ ₯만 주어진닀. www.acmicpc.net πŸ“Ž Submission Code μ•Œκ³ λ¦¬μ¦˜ 문제λ₯Ό ν’€ λ•Œ, 1가지 λ°©μ‹μœΌλ‘œλ§Œ μ ‘κ·Όν•˜κΈ°λ³΄λ‹€λŠ” λ‹€μ–‘ν•œ λ°©λ²•μœΌλ‘œ μ ‘κ·Όν•˜λŠ” μŠ΅κ΄€μ„ κ°€μ§€μžπŸ‘ŠπŸ» # case 1 '''μ—λΌν† μŠ€ν…Œλ„€μŠ€μ˜ 체 ν™œμš©ν•˜κΈ° : μ‹œκ°„μ„ 쀄이기 μœ„ν•΄μ„œ λ£¨νŠΈν•œ λΆ€λΆ„κΉŒμ§€λ§Œ for 반볡문''' import sys M, N = map(int, sys.stdin.readline().split()) prime_num = [] for i in range(M, N+1..
λ°±μ€€ 2108 [톡계학] : 파이썬 & κ΅¬ν˜„ ,μ •λ ¬ (with for 반볡문 & Counter & statistics) 3가지 λ°©λ²•μœΌλ‘œ 풀어보기 πŸ“Œ 문제 https://www.acmicpc.net/problem/2108 2108번: 톡계학 첫째 쀄에 수의 개수 N(1 ≤ N ≤ 500,000)이 주어진닀. 단, N은 ν™€μˆ˜μ΄λ‹€. κ·Έ λ‹€μŒ N개의 μ€„μ—λŠ” μ •μˆ˜λ“€μ΄ 주어진닀. μž…λ ₯λ˜λŠ” μ •μˆ˜μ˜ μ ˆλŒ“κ°’μ€ 4,000을 λ„˜μ§€ μ•ŠλŠ”λ‹€. www.acmicpc.net πŸ” 풀이 총 세가지 λ°©λ²•μœΌλ‘œ ν’€μ–΄λ³΄μ•˜μŠ΅λ‹ˆλ‹€. κ°œμΈμ μœΌλ‘œλŠ” Counter λͺ¨λ“ˆλ‘œ ν‘ΈλŠ” 방법이 κ°€μž₯ κΉ”λ”ν•˜κ³  λ§ˆμŒμ— λ“€μ—ˆμŠ΅λ‹ˆλ‹€πŸ₯• μ‚°μˆ ν‰κ· , 쀑앙값, λ²”μœ„λŠ” μ•„λž˜μ™€ 같이 λ¬Έμ œμ— κ·ΈλŒ€λ‘œ λ‚˜μ™€μžˆμ–΄μ„œ 뢀가적인 μ„€λͺ…은 ν•˜μ§€μ•Šκ² μŠ΅λ‹ˆλ‹€:) ν˜Ήμ‹œλ‚˜ κΆκΈˆν•˜μ‹œλ©΄ λŒ“κΈ€μ£Όμ‹œλ©΄ μ„€λͺ…λ“œλ¦¬κ² μŠ΅λ‹ˆλ‹€. μ‚°μˆ ν‰κ·  : N개의 μˆ˜λ“€μ˜ 합을 N으둜 λ‚˜λˆˆ κ°’ 쀑앙값 : N개의 μˆ˜λ“€μ„ μ¦κ°€ν•˜λŠ” μˆœμ„œλ‘œ λ‚˜μ—΄ν–ˆμ„ 경우 κ·Έ 쀑앙에 μœ„μΉ˜ν•˜λŠ” κ°’ μ΅œλΉˆκ°’ ..
λ°±μ€€ 1755 [μˆ«μžλ†€μ΄] : 파이썬 & λ¬Έμžμ—΄ μ •λ ¬ (with maketrans & translate, join) πŸ“Œ 문제 https://www.acmicpc.net/problem/1755 1755번: μˆ«μžλ†€μ΄ 79λ₯Ό μ˜μ–΄λ‘œ 읽되 숫자 λ‹¨μœ„λ‘œ ν•˜λ‚˜μ”© μ½λŠ”λ‹€λ©΄ "seven nine"이 λœλ‹€. 80은 λ§ˆμ°¬κ°€μ§€λ‘œ "eight zero"라고 μ½λŠ”λ‹€. 79λŠ” 80보닀 μž‘μ§€λ§Œ, μ˜μ–΄λ‘œ 숫자 ν•˜λ‚˜μ”© μ½λŠ”λ‹€λ©΄ "eight zero"κ°€ "seven nine"보닀 μ‚¬μ „μˆœμœΌλ‘œ www.acmicpc.net πŸ” 풀이 1. 첫번째 μ‹œλ„ 일단 ν’€μ–΄λ³Έ 방법 ! [전체 μ½”λ“œ] '''μ΅œμ’… 제좜 μ½”λ“œ''' M , N = map(int, input().split()) num_list = [str(i) for i in range(M, N + 1)] def convert_to_str(txt): dictionary = {'0':'zero', '1':'one..