πŸ—οΈ Algorithm/🟦 이것이 취업을 μœ„ν•œ μ½”λ”©ν…ŒμŠ€νŠΈ 8

[이것이 취업을 μœ„ν•œ μ½”λ”© ν…ŒμŠ€νŠΈ] [κ΅¬ν˜„] [Python] λŸ­ν‚€ 슀트레이트

문제 https://www.acmicpc.net/problem/18406 18406번: λŸ­ν‚€ 슀트레이트 첫째 쀄에 점수 N이 μ •μˆ˜λ‘œ 주어진닀. (10 ≤ N ≤ 99,999,999) 단, 점수 N의 μžλ¦Ώμˆ˜λŠ” 항상 짝수 ν˜•νƒœλ‘œλ§Œ 주어진닀. www.acmicpc.net 풀이 # κ΅¬ν˜„ - λŸ­ν‚€ 슀트레이트 n = int(input()) length = len(n) summary = 0 # μ™Όμͺ½ λΆ€λΆ„μ˜ 자릿수 ν•© λ”ν•˜κΈ° for i in range(length//2): summary += int(n[i]) # 였λ₯Έμͺ½ λΆ€λΆ„μ˜ 자릿수 ν•© λΉΌκΈ° for i in range(length//2, length): summary -= int(n[i]) # μ™Όμͺ½ λΆ€λΆ„κ³Ό 였λ₯Έμͺ½ λΆ€λΆ„μ˜ 자릿수 합이 λ™μΌν•œμ§€ 검사 if summary ..

[이것이 취업을 μœ„ν•œ μ½”λ”© ν…ŒμŠ€νŠΈ] [그리디] [Python] λ¬Έμžμ—΄ 뒀집기

문제 λ‹€μ†œμ΄λŠ” 0κ³Ό 1둜만 이루어진 λ¬Έμžμ—΄ Sλ₯Ό 가지고 μžˆλ‹€. λ‹€μ†œμ΄λŠ” 이 λ¬Έμžμ—΄ S에 μžˆλŠ” λͺ¨λ“  숫자λ₯Ό μ „λΆ€ κ°™κ²Œ λ§Œλ“€λ €κ³  ν•œλ‹€. λ‹€μ†œμ΄κ°€ ν•  수 μžˆλŠ” 행동은 Sμ—μ„œ μ—°μ†λœ ν•˜λ‚˜ μ΄μƒμ˜ 숫자λ₯Ό 작고 λͺ¨λ‘ λ’€μ§‘λŠ” 것이닀. λ’€μ§‘λŠ” 것은 1을 0으둜, 0을 1둜 λ°”κΎΈλŠ” 것을 μ˜λ―Έν•œλ‹€. 예λ₯Ό λ“€μ–΄ S=0001100 일 λ•Œ, 전체λ₯Ό λ’€μ§‘μœΌλ©΄ 1110011이 λœλ‹€. 4번째 λ¬ΈμžλΆ€ν„° 5번째 λ¬ΈμžκΉŒμ§€ λ’€μ§‘μœΌλ©΄ 1111111이 λ˜μ–΄μ„œ 2번 λ§Œμ— λͺ¨λ‘ 같은 숫자둜 λ§Œλ“€ 수 μžˆλ‹€. ν•˜μ§€λ§Œ, μ²˜μŒλΆ€ν„° 4번째 λ¬ΈμžλΆ€ν„° 5번째 λ¬ΈμžκΉŒμ§€ 문자λ₯Ό λ’€μ§‘μœΌλ©΄ ν•œ λ²ˆμ— 0000000이 λ˜μ–΄μ„œ 1번 λ§Œμ— λͺ¨λ‘ 같은 숫자둜 λ§Œλ“€ 수 μžˆλ‹€. λ¬Έμžμ—΄ Sκ°€ μ£Όμ–΄μ‘Œμ„ λ•Œ, λ‹€μ†œμ΄κ°€ ν•΄μ•Όν•˜λŠ” ν–‰λ™μ˜ μ΅œμ†Œ 횟수λ₯Ό 좜λ ₯ν•˜μ‹œμ˜€. μž…λ ₯ 첫째 쀄에 λ¬Έμžμ—΄ ..

[이것이 취업을 μœ„ν•œ μ½”λ”© ν…ŒμŠ€νŠΈ] [그리디] [Python] λ§Œλ“€ 수 μ—†λŠ” κΈˆμ•‘

문제 N개의 동전이 μ£Όμ–΄μ§ˆ λ•Œ, 이 λ™μ „λ“€λ‘œ λ§Œλ“€ 수 μ—†λŠ” μ–‘μ˜ μ •μˆ˜ κΈˆμ•‘ 쀑 μ΅œμ†Ÿκ°’μ„ κ΅¬ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜μ‹œμ˜€. μž…λ ₯ 첫째 μ€„μ—λŠ” λ™μ „μ˜ 개수λ₯Ό λ‚˜νƒ€λ‚΄λŠ” μ–‘μ˜ μ •μˆ˜ N이 주어진닀. (1

[이것이 취업을 μœ„ν•œ μ½”λ”© ν…ŒμŠ€νŠΈ] [그리디] [Python] κ³±ν•˜κΈ° ν˜Ήμ€ λ”ν•˜κΈ°

문제 각 μžλ¦¬κ°€ 숫자(0λΆ€ν„° 9)둜만 이루어진 λ¬Έμžμ—΄ Sκ°€ μ£Όμ–΄μ‘Œμ„ λ•Œ, μ™Όμͺ½λΆ€ν„° 였λ₯Έμͺ½μœΌλ‘œ ν•˜λ‚˜μ”© λͺ¨λ“  숫자λ₯Ό ν™•μΈν•˜λ©° 숫자 사이에 '*' ν˜Ήμ€ '+' μ—°μ‚°μžλ₯Ό λ„£μ–΄ 결과적으둜 λ§Œλ“€μ–΄μ§ˆ 수 μžˆλŠ” κ°€μž₯ 큰 수λ₯Ό κ΅¬ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜μ„Έμš”. 단, +보닀 *λ₯Ό λ¨Όμ € κ³„μ‚°ν•˜λŠ” 일반적인 λ°©μ‹κ³ΌλŠ” 달리, λͺ¨λ“  연산은 μ™Όμͺ½μ—μ„œλΆ€ν„° μˆœμ„œλŒ€λ‘œ 이루어진닀고 κ°€μ •ν•©λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄ 02984λΌλŠ” λ¬Έμžμ—΄μ΄ 주어지면, λ§Œλ“€μ–΄μ§ˆ 수 μžˆλŠ” κ°€μž₯ ν°μˆ˜λŠ” ((((0+2)*9)*8)*4) = 576 μž…λ‹ˆλ‹€. μž…λ ₯ 첫째 쀄에 μ—¬λŸ¬ 개의 숫자둜 κ΅¬μ„±λ„λ‹ˆ ν•˜λ‚˜μ˜ λ¬Έμžμ—΄ Sκ°€ μ£Όμ–΄μ§‘λ‹ˆλ‹€. (1

[이것이 취업을 μœ„ν•œ μ½”λ”© ν…ŒμŠ€νŠΈ] [그리디] [Python] λͺ¨ν—˜κ°€ κΈΈλ“œ

🍏 문제 ν•œ λ§ˆμ„μ— λͺ¨ν—˜κ°€κ°€ Nλͺ… μžˆμŠ΅λ‹ˆλ‹€. λͺ¨ν—˜κ°€ κΈΈλ“œμ—μ„œλŠ” Nλͺ…μ˜ λͺ¨ν—˜κ°€λ₯Ό λŒ€μƒμœΌλ‘œ '곡포도'λ₯Ό μΈ‘μ •ν–ˆλŠ”λ°,'곡포도'κ°€ 높은 λͺ¨ν—˜κ°€λŠ” μ‰½κ²Œ 곡포λ₯Ό 느껴 μœ„ν—˜ μƒν™©μ—μ„œ μ œλŒ€λ‘œ λŒ€μ²˜ν•  λŠ₯λ ₯이 λ–¨μ–΄μ§‘λ‹ˆλ‹€. λͺ¨ν—˜κ°€ κΈΈλ“œμž₯인 λ™λΉˆμ΄λŠ” λͺ¨ν—˜κ°€ 그룹을 μ•ˆμ „ν•˜κ²Œ κ΅¬μ„±ν•˜κ³ μž 곡포도가 X인 λͺ¨ν—˜κ°€λŠ” λ°˜λ“œμ‹œ Xλͺ… μ΄μƒμœΌλ‘œκ΅¬μ„±ν•œ λͺ¨ν—˜κ°€ 그룹에 μ°Έμ—¬ν•΄μ•Ό 여행을 λ– λ‚  수 μžˆλ„λ‘ κ·œμ •ν–ˆμŠ΅λ‹ˆλ‹€. λ™λΉˆμ΄λŠ” μ΅œλŒ€ λͺ‡ 개의 λͺ¨ν—˜κ°€ 그룹을 λ§Œλ“€ 수 μžˆλŠ”μ§€ κΆκΈˆν•©λ‹ˆλ‹€. Nλͺ…μ˜ λͺ¨ν—˜κ°€μ— λŒ€ν•œ 정보가 μ£Όμ–΄μ‘Œμ„ λ•Œ, 여행을 λ– λ‚  수 μžˆλŠ” κ·Έλ£Ή 수의 μ΅œλŒ“κ°’μ„ κ΅¬ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜μ„Έμš”. 예λ₯Ό λ“€μ–΄, N = 5이고, 각 λͺ¨ν—˜κ°€μ˜ 곡포도가 λ‹€μŒκ³Ό κ°™λ‹€κ³  κ°€μ •ν•©μ‹œλ‹€. 2 3 1 2 2 이 경우 κ·Έλ£Ή 1에 곡포도가 1,2,3인 λͺ¨ν—˜κ°€λ₯Ό ν•œ λͺ…μ”© λ„£κ³ ..

[이것이 취업을 μœ„ν•œ μ½”λ”© ν…ŒμŠ€νŠΈ] λ‹€μ΄λ‚˜λ―Ή ν”„λ‘œκ·Έλž˜λ°(Dynamic Programming)

λ‹€μ΄λ‚˜λ―Ή ν”„λ‘œκ·Έλž˜λ°( Dynamic Programming ) λ‹€μ΄λ‚˜λ―Ή ν”„λ‘œκ·Έλž˜λ°μ€ 동적 κ³„νšλ²•μ΄λΌκ³ λ„ λΆ€λ₯Έλ‹€ 일반적인 ν”„λ‘œκ·Έλž˜λ° λΆ„μ•Όμ—μ„œμ˜ 동적(Dynamic)μ΄λž€ μ–΄λ–€ 의미λ₯Ό κ°€μ§ˆκΉŒ? μžλ£Œκ΅¬μ‘°μ—μ„œ 동적 ν• λ‹Ή(Dynamic Allocation)은 'ν”„λ‘œκ·Έλž¨μ΄ μ‹€ν–‰λ˜λŠ” 도쀑에 싀행에 ν•„μš”ν•œ λ©”λͺ¨λ¦¬λ₯Ό ν• λ‹Ήν•˜λŠ” 기법'을 μ˜λ―Έν•œλ‹€ λ°˜λ©΄μ— λ‹€μ΄λ‚˜λ―Ή ν”„λ‘œκ·Έλž˜λ°μ—μ„œ 'λ‹€μ΄λ‚˜λ―Ή'은 별닀λ₯Έ 의미 없이 μ‚¬μš©λœ 단어이닀 λ‹€μ΄λ‚˜λ―Ή ν”„λ‘œκ·Έλž˜λ°μ€ λ‹€μŒμ˜ 쑰건을 λ§Œμ‘±ν•  λ•Œ μ‚¬μš©ν•  수 μžˆλ‹€ 졜적 λΆ€λΆ„ ꡬ쑰 (Optimal Substructure) 큰 문제λ₯Ό μž‘μ€ 문제둜 λ‚˜λˆŒ 수 있으며 μž‘μ€ 문제둜 λ‚˜λˆŒ 수 있으며 μž‘μ€ 문제의 닡을 λͺ¨μ•„μ„œ 큰 문제λ₯Ό ν•΄κ²°ν•  수 μžˆλ‹€ μ€‘λ³΅λ˜λŠ” λΆ€λΆ„ 문제 (Overlapping Subproblem) 동일..

[이것이 취업을 μœ„ν•œ μ½”λ”© ν…ŒμŠ€νŠΈ] 트리 자료ꡬ쑰

트리 자료ꡬ쑰 μ•žμ„œ λ§ν•œ 이진 탐색은 μ „μ œ 쑰건이 데이터가 μ •λ ¬λ˜μ–΄ μžˆμ–΄μ•Ό ν•œλ‹€. 예λ₯Ό λ“€μ–΄ λ™μž‘ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ—μ„œ 데이터λ₯Ό μ •λ ¬ν•΄λ‘λŠ” κ²½μš°κ°€ λ§ŽμœΌλ―€λ‘œ 이진 탐색을 효과적으둜 μ‚¬μš©ν•  수 μžˆλ‹€. λ°μ΄ν„°λ² μ΄μŠ€λŠ” λ‚΄λΆ€μ μœΌλ‘œ λŒ€μš©λŸ‰ 데이터 μ²˜λ¦¬μ— μ ν•©ν•œ 트리(tree) 자료ꡬ쑰λ₯Ό μ΄μš”ν•˜μ—¬ 항상 데이터가 μ •λ ¬λ˜μ–΄ μžˆλ‹€. λ”°λΌμ„œ λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œμ˜ 탐색은 이진 νƒμƒ‰κ³ΌλŠ” 쑰금 λ‹€λ₯΄μ§€λ§Œ, 이진 탐색과 μœ μ‚¬ν•œ 방법을 μ΄μš©ν•΄ 탐색을 항상 λΉ λ₯΄κ²Œ μˆ˜ν–‰ν•˜λ„λ‘ μ„€κ³„λ˜μ–΄ μžˆμ–΄μ„œ 데이터가 λ§Žμ•„λ„ νƒμƒ‰ν•˜λŠ” 속도가 λΉ λ₯΄λ‹€. 트리 μžλ£Œκ΅¬μ‘°λž€ 무엇인가? 트리 μžλ£Œκ΅¬μ‘°λŠ” λ…Έλ“œμ™€ λ…Έλ“œμ˜ μ—°κ²°λ£Œ ν‘œν˜„ν•˜λ©° μ—¬κΈ°μ—μ„œ λ…Έλ“œλŠ” μ •λ³΄μ˜ λ‹¨μœ„λ‘œμ„œ μ–΄λ– ν•œ 정보λ₯Ό 가지고 μžˆλŠ” 개체둜 이해할 수 μžˆλ‹€. κ·Έλž˜ν”„λ₯Ό λ‹€λ£° λ•Œ λ‚˜μ˜¨ λ…Έλ“œμ™€ λ™μΌν•˜λ‹€. μ΅œλ‹¨ κ²½λ‘œμ—μ„œλŠ” λ…Έ..

[이것이 취업을 μœ„ν•œ μ½”λ”© ν…ŒμŠ€νŠΈ] 이진 탐색(Binary Search)

** 이진 νƒμƒ‰μ΄λž€ ? λ‚΄λΆ€μ˜ 데이터가 μ •λ ¬λ˜μ–΄ μžˆμ„ λ•Œ μ‚¬μš©ν•  수 μžˆλŠ” μ•Œκ³ λ¦¬μ¦˜ 이미 μ •λ ¬λ˜μ–΄ μžˆλ‹€λ©΄ 데이터λ₯Ό 맀우 λΉ λ₯΄κ²Œ 찾을 수 μžˆλ‹€λŠ” νŠΉμ§•μ΄ 있음 탐색 λ²”μœ„λ₯Ό μ ˆλ°˜μ”© μ’ν˜€κ°€λ©° 데이터λ₯Ό 탐색 μ‹œκ°„ λ³΅μž‘λ„ O(logN) κ΅¬ν˜„ 방법 이진 탐색은 μœ„μΉ˜λ₯Ό λ‚˜νƒ€λ‚΄λŠ” λ³€μˆ˜ 3개λ₯Ό μ‚¬μš©ν•˜λŠ”λ° νƒμƒ‰ν•˜κ³ μž ν•˜λŠ” λ²”μœ„μ˜ μ‹œμž‘μ (start), 끝점(end), 쀑간점(mid)을 이용 μ°ΎμœΌλ €λŠ” 데이터와 쀑간점(mid)μœ„μΉ˜μ— μžˆλŠ” 데이터λ₯Ό 반볡적으둜 λΉ„κ΅ν•˜μ—¬ μ›ν•˜λŠ” 데이터λ₯Ό 찾음 μ–Έμ œ μ¨μ•Όν•˜λ‚˜ ? μ½”λ”© ν…ŒμŠ€νŠΈμ—μ„œμ˜ 이진 탐색 λ¬Έμ œλŠ” 탐색 λ²”μœ„κ°€ 큰 μƒν™©μ—μ„œμ˜ 탐색을 κ°€μ •ν•˜λŠ” λ¬Έμ œκ°€ λ§Žλ‹€. λ”°λΌμ„œ 탐색 λ²”μœ„κ°€ 2000λ§Œμ„ λ„˜μ–΄κ°€λ©΄ 이진 νƒμƒ‰μœΌλ‘œ λ¬Έμ œμ— μ ‘κ·Όν•΄λ³΄λŠ” 것이 쒋을 것 κ°™λ‹€. μ²˜λ¦¬ν•΄μ•Ό ν•  λ°μ΄ν„°μ˜ κ°œμˆ˜λ‚˜ 값이 1000..