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

πŸ“ μ•Œκ³ λ¦¬μ¦˜

(143)
[C++/BOJ] 2149 : μ•”ν˜Έ 해독 문제 μ–΄λ–€ λ¬Έμž₯을 ν‚€λ₯Ό μ΄μš©ν•˜μ—¬ λ‹€μŒκ³Ό 같이 μ•”ν˜Έν™”ν•˜λ € ν•œλ‹€. μ•”ν˜Έν™”ν•˜κΈ° μ „μ˜ λ¬Έμž₯을 평문이라 ν•˜λ©°, μ•”ν˜Έν™” 된 λ¬Έμž₯은 μ•”ν˜Έλ¬Έμ΄λΌκ³  ν•œλ‹€. ν‚€, 평문, μ•”ν˜Έλ¬Έμ€ λͺ¨λ‘ μ˜μ–΄ λŒ€λ¬Έμžλ‘œ 된 곡백 μ—†λŠ” λ¬Έμž₯이닀. ν‚€μ˜ 길이λ₯Ό N이라고 ν–ˆμ„ λ•Œ, μš°μ„  평문을 N κΈ€μžμ”© μž˜λΌμ„œ λ‹€μŒκ³Ό 같이 λ‚˜μ—΄ν•œλ‹€. 예λ₯Ό λ“€μ–΄ 평문이 MEETMEBYTHEOLDOAKTREENTH 이고, ν‚€κ°€ BATBOY라고 ν•΄ 보자. 제일 μœ—μ€„μ€ 이해λ₯Ό 돕기 μœ„ν•΄ ν‚€λ₯Ό λ‹€μ‹œ ν•œ 번 μ“΄ 것이닀. 이제 이 ν–‰λ ¬(λ°°μ—΄)을 μ—΄(Column) λ‹¨μœ„λ‘œ 정렬을 ν•˜λŠ”λ°, 정렬을 ν•˜λŠ” 킀쀀은 ν‚€μ˜ 문자둜 ν•œλ‹€. 즉 BATBOYλ₯Ό μ •λ ¬ν•˜μ—¬ ABBOTY와 같이 μ •λ ¬ν•˜λŠ” 것이닀. B와 같이 μ—¬λŸ¬ 번 λ‚˜νƒ€λ‚˜λŠ” 문자의 κ²½μš°μ—λŠ” μ›λž˜μ˜ ν–‰λ ¬μ—μ„œ 더 μ™Όμͺ½μ— μžˆμ—ˆλ˜ 것을 λ¨Όμ € ..
[C++/BOJ] 2293 : 동전 1 문제 n가지 μ’…λ₯˜μ˜ 동전이 μžˆλ‹€. 각각의 동전이 λ‚˜νƒ€λ‚΄λŠ” κ°€μΉ˜λŠ” λ‹€λ₯΄λ‹€. 이 동전을 μ λ‹Ήνžˆ μ‚¬μš©ν•΄μ„œ, κ·Έ κ°€μΉ˜μ˜ 합이 k원이 λ˜λ„λ‘ ν•˜κ³  μ‹Άλ‹€. κ·Έ 경우의 수λ₯Ό κ΅¬ν•˜μ‹œμ˜€. 각각의 동전은 λͺ‡ κ°œλΌλ„ μ‚¬μš©ν•  수 μžˆλ‹€. μ‚¬μš©ν•œ λ™μ „μ˜ ꡬ성이 같은데, μˆœμ„œλ§Œ λ‹€λ₯Έ 것은 같은 κ²½μš°μ΄λ‹€. μž…λ ₯ 첫째 쀄에 n, kκ°€ 주어진닀. (1 ≤ n ≤ 100, 1 ≤ k ≤ 10,000) λ‹€μŒ n개의 μ€„μ—λŠ” 각각의 λ™μ „μ˜ κ°€μΉ˜κ°€ 주어진닀. λ™μ „μ˜ κ°€μΉ˜λŠ” 100,000보닀 μž‘κ±°λ‚˜ 같은 μžμ—°μˆ˜μ΄λ‹€. 좜λ ₯ 첫째 쀄에 경우의 수λ₯Ό 좜λ ₯ν•œλ‹€. 경우의 μˆ˜λŠ” 231보닀 μž‘λ‹€. λ°±μ€€ κ³¨λ“œ 5 문제! λ°±νŠΈλž˜ν‚Ήμ΄λ‚˜ 완탐 문제일 쀄 μ•Œμ•˜λŠ”λ° μ•Œκ³ λ³΄λ‹ˆ dpμ˜€λ‹€.... 0원인 경우의 μˆ˜λŠ” 1이닀. dp[0] = 1; 1원이 κ°€λŠ₯ν•œ 경우의 μˆ˜λŠ” 1원..
[μ½”λ“œνŠΈλ¦¬] BFS 탐색 / 갈 수 μžˆλŠ” κ³³λ“€ 갈 수 μžˆλŠ” κ³³λ“€ 숫자 0, 1둜만 이루어진 n * n κ²©μžκ°€ μ£Όμ–΄μ‘Œμ„ λ•Œ, k개의 μ‹œμž‘μ μœΌλ‘œλΆ€ν„° μƒν•˜μ’Œμš° μΈμ ‘ν•œ 곳으둜만 μ΄λ™ν•˜μ—¬ 도달 κ°€λŠ₯ν•œ 칸의 수λ₯Ό κ΅¬ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•΄λ³΄μ„Έμš”. 숫자 0은 ν•΄λ‹Ή 칸이 이동할 수 μžˆλŠ” κ³³μž„μ„, 숫자 1은 ν•΄λ‹Ή 칸이 이동할 수 μ—†λŠ” κ³³μž„μ„ μ˜λ―Έν•©λ‹ˆλ‹€. μž…λ ₯ ν˜•μ‹ 첫 번째 μ€„μ—λŠ” 격자의 크기λ₯Ό λ‚˜νƒ€λ‚΄λŠ” nκ³Ό μ‹œμž‘μ μ˜ 수λ₯Ό λ‚˜νƒ€λ‚΄λŠ” k 값이 곡백을 사이에 두고 μ£Όμ–΄μ§‘λ‹ˆλ‹€. 두 번째 쀄 λΆ€ν„°λŠ” n개의 쀄에 걸쳐 각 행에 ν•΄λ‹Ήν•˜λŠ” n개의 μˆ«μžκ°€ μˆœμ„œλŒ€λ‘œ 곡백을 사이에 두고 μ£Όμ–΄μ§‘λ‹ˆλ‹€. κ·Έ λ‹€μŒ 쀄 λΆ€ν„°λŠ” k개의 쀄에 걸쳐 각 μ‹œμž‘μ μ˜ μœ„μΉ˜ (r, c)κ°€ 곡백을 사이에 두고 μ£Όμ–΄μ§‘λ‹ˆλ‹€. (r, c)λŠ” rν–‰ cμ—΄ μœ„μΉ˜κ°€ μ‹œμž‘μ  쀑 ν•˜λ‚˜μž„μ„ μ˜λ―Έν•©λ‹ˆλ‹€. λͺ¨λ“  μ‹œμž‘μ μ˜ μœ„μΉ˜μ— 적..
[μ½”λ“œνŠΈλ¦¬] BFS 탐색 / λ„€ λ°©ν–₯ νƒˆμΆœ κ°€λŠ₯ μ—¬λΆ€ νŒλ³„ν•˜κΈ° λ„€ λ°©ν–₯ νƒˆμΆœ κ°€λŠ₯ μ—¬λΆ€ νŒλ³„ν•˜κΈ° n * m 크기의 이차원 μ˜μ—­μ˜ 쒌츑 μƒλ‹¨μ—μ„œ μΆœλ°œν•˜μ—¬ 우츑 ν•˜λ‹¨κΉŒμ§€ λ±€μ—κ²Œ 물리지 μ•Šκ³  νƒˆμΆœν•˜λ €κ³  ν•©λ‹ˆλ‹€. 이동을 ν•  λ•Œμ—λŠ” λ°˜λ“œμ‹œ μƒν•˜μ’Œμš°μ— μΈμ ‘ν•œ 칸으둜만 이동할 수 있으며, 뱀이 μžˆλŠ” μΉΈμœΌλ‘œλŠ” 이동을 ν•  수 μ—†μŠ΅λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄ κ³Ό 같이 뱀이 배치 λ˜μ–΄ μžˆλŠ” 경우 μ‹€μ„ κ³Ό 같은 경둜둜 νƒˆμΆœμ„ ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 이 λ•Œ λ±€μ—κ²Œ 물리지 μ•Šκ³  νƒˆμΆœ κ°€λŠ₯ν•œ κ²½λ‘œκ°€ μžˆλŠ”μ§€ μ—¬λΆ€λ₯Ό νŒλ³„ν•˜λŠ” μ½”λ“œλ₯Ό μž‘μ„±ν•΄λ³΄μ„Έμš”. μž…λ ₯ ν˜•μ‹ 첫번째 μ€„μ—λŠ” nκ³Ό m이 곡백을 사이에 두고 주어지고, λ‘λ²ˆμ§Έ 쀄뢀터 (n+1)번째 μ€„κΉŒμ§€λŠ” 각 행에 뱀이 μ—†λŠ” 경우 1, 뱀이 μžˆλŠ” 경우 0이 μž…λ ₯으둜 곡백을 사이에 두고 μ£Όμ–΄μ§‘λ‹ˆλ‹€. μ‹œμž‘ μΉΈκ³Ό 끝 μΉΈμ—λŠ” 뱀이 주어지지 μ•ŠλŠ”λ‹€κ³  가정해도 μ’‹μŠ΅λ‹ˆλ‹€. 2 ≤ n..
[μ½”λ“œνŠΈλ¦¬] 완전탐색 / 자리 수 λ‹¨μœ„λ‘œ 완탐 μ—°μŠ΅λ¬Έμ œ 5개의 숫자 [1, 5, 2, 6, 8]이 μ£Όμ–΄μ‘Œμ„ λ•Œ 이 쀑 단 ν•˜λ‚˜μ˜ 숫자만 두 배둜 ν•΄μ„œ, μΈμ ‘ν•œ μˆ«μžκ°„μ˜ 차이의 합이 μ΅œλŒ€κ°€ λ˜λ„λ‘ ν•΄λ³΄μ„Έμš”. μœ„ λ¬Έμ œλŠ” λ‹¨μˆœν•˜κ²Œ, λͺ¨λ“  μœ„μΉ˜μ˜ 숫자λ₯Ό 2λ°°μ”© ν•΄λ³΄λŠ” 완전탐색을 진행해 λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€. 1. 첫 번째 숫자 1에 2λ°°λ₯Ό ν•˜λŠ” 경우 [2, 5, 2, 6, 8]이 λ˜λ―€λ‘œ, μΈμ ‘ν•œ μˆ«μžκ°„μ˜ 차이의 합은 3 + 3 + 4 + 2 = 12κ°€ λ©λ‹ˆλ‹€. 2. 두 번째 숫자 5에 2λ°°λ₯Ό ν•˜λŠ” 경우 [1, 10, 2, 6, 8]이 λ‚¨κ²Œ λ˜λ―€λ‘œ, μΈμ ‘ν•œ μˆ«μžκ°„μ˜ 차이의 합은 9 + 8 + 4 + 2 = 23이 λ©λ‹ˆλ‹€. 3. μ„Έ 번째 숫자 2에 2λ°°λ₯Ό ν•˜λŠ” 경우 [1, 5, 4, 6, 8]이 λ‚¨κ²Œ λ˜λ―€λ‘œ, μΈμ ‘ν•œ μˆ«μžκ°„μ˜ 차이의 합은 4 + 1 + 2 + 2 = 9κ°€ 됩..
[μ½”λ“œνŠΈλ¦¬] Greedy - 그리디 μ•Œκ³ λ¦¬μ¦˜ / 동전 μ—°μŠ΅λ¬Έμ œ 1, 4, 5 동전을 μ΄μš©ν•˜μ—¬ 8원을 거슬러주기 μœ„ν•΄ ν•„μš”ν•œ μ΅œμ†Œ λ™μ „μ˜ 수λ₯Ό κ΅¬ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•΄λ³΄μ„Έμš”. μœ„ 문제λ₯Ό 보면 λ‹Ήμ—°νžˆ 큰 동전뢀터 μ“°λŠ” 것이 μ’‹μ•„ λ³΄μž…λ‹ˆλ‹€. ν•˜μ§€λ§Œ 큰 동전뢀터 μ‚¬μš©ν•˜κ²Œ 되면 5 + 1 + 1 + 1μ΄λ―€λ‘œ 4개의 동전이 ν•„μš”ν•˜μ§€λ§Œ, 4 + 4 μ—­μ‹œ 8 μ΄λ―€λ‘œ μ΅œμ†Œ λ™μ „μ˜ μˆ˜λŠ” 2κ°€ λ©λ‹ˆλ‹€. 그런데 λ‹€μŒ κ²½μš°λŠ” μ–΄λ–¨κΉŒμš”? 1, 5, 10, 20 동전을 μ΄μš©ν•˜μ—¬ 78원을 거슬러주기 μœ„ν•΄ ν•„μš”ν•œ μ΅œμ†Œ λ™μ „μ˜ 수λ₯Ό κ΅¬ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•΄λ³΄μ„Έμš”. 이 κ²½μš°μ—λŠ” 큰 동전뢀터 κ±°μŠ¬λŸ¬μ£ΌλŠ” 것이 항상 μ’‹μŠ΅λ‹ˆλ‹€. κ·Έ μ΄μœ λŠ” 주어진 동전듀이 μ „λΆ€ λ°°μˆ˜κ΄€κ³„μ— λ†“μ—¬μžˆκΈ° λ•Œλ¬Έμž…λ‹ˆλ‹€. 그렇기에 큰 동전이 μ‚¬μš©μ΄ κ°€λŠ₯ν•˜λ‹€λ©΄, μž‘μ€ 동전을 μ‚¬μš©ν•˜λŠ” 것보닀 항상 쒋은 선택이 λ˜λŠ” κ²ƒμž…λ‹ˆλ‹€. λ”°λΌμ„œ 배수 ..
[μ½”λ“œνŠΈλ¦¬] Backtracking - λ°±νŠΈλž˜ν‚Ή / μž¬κ·€ μ—°μŠ΅λ¬Έμ œ λ°±νŠΈλž˜ν‚Ή. λŒ€μΆ© μ•Œκ³ μžˆλŠ”κ±΄ λ°±νŠΈλž˜ν‚Ή == 완전탐색(λͺ¨λ“  경우의 수λ₯Ό λ¬΄μ‹ν•˜κ²Œ μ°ΎκΈ°)μ—μ„œ κ°€μ§€μΉ˜κΈ°λ‘œ 효율 λ†’μž„ μ΄μ •λ„λΌμ„œ..γ…‹γ…‹ μ—°μŠ΅λ¬Έμ œλ„ 풀어봐야겠닀 λŒ€λΆ€λΆ„μ˜ μ•Œκ³ λ¦¬μ¦˜ λ¬Έμ œλ“€μ€ μ›ν•˜λŠ” λͺ¨λ“  쑰합을 λ§Œλ“€μ–΄ κ·Έ 쀑 λ¬Έμ œμ—μ„œ μ›ν•˜λŠ” 닡을 κ³ λ₯΄λŠ” μ‹μœΌλ‘œ 해결이 κ°€λŠ₯ν•©λ‹ˆλ‹€. λ§Œμ•½ n μ œν•œμ΄ μž‘κ³ , λͺ¨λ“  쑰합을 λ§Œλ“œλŠ” 데 κ±Έλ¦¬λŠ” μ‹œκ°„μ΄ λ¬Έμ œμ—μ„œ 주어진 μ œν•œ μ‹œκ°„λ³΄λ‹€ 더 μž‘λ‹€λ©΄, 항상 λͺ¨λ“  쑰합을 λ‹€ λ§Œλ“€μ–΄ λ³΄λŠ” 것이 가독성 μΈ‘λ©΄μ—μ„œλ‚˜, μ½”λ“œλ₯Ό μž‘μ„±ν•˜λŠ” μž…μž₯μ—μ„œ κ°€μž₯ μ’‹λ‹€κ³  ν•  수 μžˆμ„ κ²ƒμž…λ‹ˆλ‹€. λ‹€λ§Œ, (1, 1, 1, 1, 1), (1, 1, 1, 1, 2), (1, 1, 1, 1, 3), (1, 1, 1, 2, 1), (1, 1, 1, 2, 2), .. λ“± μ—¬λŸ¬ κ°€λŠ₯ν•œ μˆœμ—΄κ³Ό 쑰합을 λ§Œλ“œλŠ” 것을 forλ¬Έ λ§Œμ„ ..
[C++/λ°±μ€€] 11052 : μΉ΄λ“œ κ΅¬λ§€ν•˜κΈ° 문제 μš”μ¦˜ λ―Όκ·œλ„€ λ™λ„€μ—μ„œλŠ” μŠ€νƒ€νŠΈλ§ν¬μ—μ„œ λ§Œλ“  PSμΉ΄λ“œλ₯Ό λͺ¨μœΌλŠ” 것이 μœ ν–‰μ΄λ‹€. PSμΉ΄λ“œλŠ” PS(Problem Solving)λΆ„μ•Όμ—μ„œ 유λͺ…ν•œ μ‚¬λžŒλ“€μ˜ 아이디와 얼꡴이 μ ν˜€μžˆλŠ” μΉ΄λ“œμ΄λ‹€. 각각의 μΉ΄λ“œμ—λŠ” 등급을 λ‚˜νƒ€λ‚΄λŠ” 색이 μΉ ν•΄μ Έ 있고, λ‹€μŒκ³Ό 같이 8가지가 μžˆλ‹€. (μΉ΄λ“œ μ’…λ₯˜λŠ” μƒλž΅) μΉ΄λ“œλŠ” μΉ΄λ“œνŒ©μ˜ ν˜•νƒœλ‘œλ§Œ ꡬ맀할 수 있고, μΉ΄λ“œνŒ©μ˜ μ’…λ₯˜λŠ” μΉ΄λ“œ 1κ°œκ°€ ν¬ν•¨λœ μΉ΄λ“œνŒ©, μΉ΄λ“œ 2κ°œκ°€ ν¬ν•¨λœ μΉ΄λ“œνŒ©, ... μΉ΄λ“œ Nκ°œκ°€ ν¬ν•¨λœ μΉ΄λ“œνŒ©κ³Ό 같이 총 N가지가 μ‘΄μž¬ν•œλ‹€. λ―Όκ·œλŠ” μΉ΄λ“œμ˜ κ°œμˆ˜κ°€ 적은 νŒ©μ΄λ”λΌλ„ 가격이 λΉ„μ‹Έλ©΄ 높은 λ“±κΈ‰μ˜ μΉ΄λ“œκ°€ 많이 λ“€μ–΄μžˆμ„ κ²ƒμ΄λΌλŠ” 미신을 λ―Ώκ³  μžˆλ‹€. λ”°λΌμ„œ, λ―Όκ·œλŠ” λˆμ„ μ΅œλŒ€ν•œ 많이 μ§€λΆˆν•΄μ„œ μΉ΄λ“œ N개 κ΅¬λ§€ν•˜λ €κ³  ν•œλ‹€. μΉ΄λ“œκ°€ i개 ν¬ν•¨λœ μΉ΄λ“œνŒ©μ˜ 가격은 Pi원이닀. 예λ₯Ό λ“€..

728x90