[programmers] 체윑볡 - Java

체윑볡 λ„λ‚œ 문제λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•œ μžλ°” μ†”λ£¨μ…˜μ„ μ„€λͺ…ν•©λ‹ˆλ‹€. 학생 수, λ„λ‚œλ‹Ήν•œ 학생 번호, μ—¬λ²Œ μ²΄μœ‘λ³΅μ„ 가진 학생 번호λ₯Ό μž…λ ₯λ°›μ•„ μ΅œλŒ€ν•œ λ§Žμ€ 학생이 μ²΄μœ‘μˆ˜μ—…μ„ 듀을 수 μžˆλ„λ‘ μ²΄μœ‘λ³΅μ„ λΉŒλ €μ£ΌλŠ” 방법을 κ΅¬ν˜„ν•©λ‹ˆλ‹€. νƒμš•λ²•μ„ μ‚¬μš©ν•˜μ—¬ 인접 ν•™μƒμ˜ μ—¬λ²Œ μ²΄μœ‘λ³΅μ„ ν™œμš©ν•˜λŠ” λ°©μ‹μœΌλ‘œ 문제λ₯Ό ν•΄κ²°ν•©λ‹ˆλ‹€.
DriedPollack's avatar
Nov 13, 2024
[programmers] 체윑볡 - Java

체윑볡

문제 μ„€λͺ…

μ μ‹¬μ‹œκ°„μ— 도둑이 λ“€μ–΄, 일뢀 학생이 μ²΄μœ‘λ³΅μ„ λ„λ‚œλ‹Ήν–ˆμŠ΅λ‹ˆλ‹€. λ‹€ν–‰νžˆ μ—¬λ²Œ 체윑볡이 μžˆλŠ” 학생이 μ΄λ“€μ—κ²Œ μ²΄μœ‘λ³΅μ„ 빌렀주렀 ν•©λ‹ˆλ‹€. ν•™μƒλ“€μ˜ λ²ˆν˜ΈλŠ” 체격 순으둜 맀겨져 μžˆμ–΄, λ°”λ‘œ μ•žλ²ˆν˜Έμ˜ ν•™μƒμ΄λ‚˜ λ°”λ‘œ λ’·λ²ˆν˜Έμ˜ ν•™μƒμ—κ²Œλ§Œ μ²΄μœ‘λ³΅μ„ λΉŒλ €μ€„ 수 μžˆμŠ΅λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, 4번 학생은 3번 ν•™μƒμ΄λ‚˜ 5번 ν•™μƒμ—κ²Œλ§Œ μ²΄μœ‘λ³΅μ„ λΉŒλ €μ€„ 수 μžˆμŠ΅λ‹ˆλ‹€. 체윑볡이 μ—†μœΌλ©΄ μˆ˜μ—…μ„ 듀을 수 μ—†κΈ° λ•Œλ¬Έμ— μ²΄μœ‘λ³΅μ„ 적절히 빌렀 μ΅œλŒ€ν•œ λ§Žμ€ 학생이 μ²΄μœ‘μˆ˜μ—…μ„ λ“€μ–΄μ•Ό ν•©λ‹ˆλ‹€.
전체 ν•™μƒμ˜ 수 n, μ²΄μœ‘λ³΅μ„ λ„λ‚œλ‹Ήν•œ ν•™μƒλ“€μ˜ λ²ˆν˜Έκ°€ λ‹΄κΈ΄ λ°°μ—΄ lost, μ—¬λ²Œμ˜ μ²΄μœ‘λ³΅μ„ κ°€μ Έμ˜¨ ν•™μƒλ“€μ˜ λ²ˆν˜Έκ°€ λ‹΄κΈ΄ λ°°μ—΄ reserveκ°€ λ§€κ°œλ³€μˆ˜λ‘œ μ£Όμ–΄μ§ˆ λ•Œ, μ²΄μœ‘μˆ˜μ—…μ„ 듀을 수 μžˆλŠ” ν•™μƒμ˜ μ΅œλŒ“κ°’μ„ return ν•˜λ„λ‘ solution ν•¨μˆ˜λ₯Ό μž‘μ„±ν•΄μ£Όμ„Έμš”.

μ œν•œμ‚¬ν•­

  • 전체 ν•™μƒμ˜ μˆ˜λŠ” 2λͺ… 이상 30λͺ… μ΄ν•˜μž…λ‹ˆλ‹€.
  • μ²΄μœ‘λ³΅μ„ λ„λ‚œλ‹Ήν•œ ν•™μƒμ˜ μˆ˜λŠ” 1λͺ… 이상 nλͺ… μ΄ν•˜μ΄κ³  μ€‘λ³΅λ˜λŠ” λ²ˆν˜ΈλŠ” μ—†μŠ΅λ‹ˆλ‹€.
  • μ—¬λ²Œμ˜ μ²΄μœ‘λ³΅μ„ κ°€μ Έμ˜¨ ν•™μƒμ˜ μˆ˜λŠ” 1λͺ… 이상 nλͺ… μ΄ν•˜μ΄κ³  μ€‘λ³΅λ˜λŠ” λ²ˆν˜ΈλŠ” μ—†μŠ΅λ‹ˆλ‹€.
  • μ—¬λ²Œ 체윑볡이 μžˆλŠ” ν•™μƒλ§Œ λ‹€λ₯Έ ν•™μƒμ—κ²Œ μ²΄μœ‘λ³΅μ„ λΉŒλ €μ€„ 수 μžˆμŠ΅λ‹ˆλ‹€.
  • μ—¬λ²Œ μ²΄μœ‘λ³΅μ„ κ°€μ Έμ˜¨ 학생이 μ²΄μœ‘λ³΅μ„ λ„λ‚œλ‹Ήν–ˆμ„ 수 μžˆμŠ΅λ‹ˆλ‹€. μ΄λ•Œ 이 학생은 μ²΄μœ‘λ³΅μ„ ν•˜λ‚˜λ§Œ λ„λ‚œλ‹Ήν–ˆλ‹€κ³  κ°€μ •ν•˜λ©°, 남은 체윑볡이 ν•˜λ‚˜μ΄κΈ°μ— λ‹€λ₯Έ ν•™μƒμ—κ²ŒλŠ” μ²΄μœ‘λ³΅μ„ λΉŒλ €μ€„ 수 μ—†μŠ΅λ‹ˆλ‹€.

μž…μΆœλ ₯ 예

n
lost
reserve
return
5
[2, 4]
[1, 3, 5]
5
5
[2, 4]
[3]
4
3
[3]
[1]
2

μž…μΆœλ ₯ 예 μ„€λͺ…

예제 #1
1번 학생이 2번 ν•™μƒμ—κ²Œ μ²΄μœ‘λ³΅μ„ 빌렀주고, 3번 ν•™μƒμ΄λ‚˜ 5번 학생이 4번 ν•™μƒμ—κ²Œ μ²΄μœ‘λ³΅μ„ 빌렀주면 학생 5λͺ…이 μ²΄μœ‘μˆ˜μ—…μ„ 듀을 수 μžˆμŠ΅λ‹ˆλ‹€.
예제 #2
3번 학생이 2번 ν•™μƒμ΄λ‚˜ 4번 ν•™μƒμ—κ²Œ μ²΄μœ‘λ³΅μ„ 빌렀주면 학생 4λͺ…이 μ²΄μœ‘μˆ˜μ—…μ„ 듀을 수 μžˆμŠ΅λ‹ˆλ‹€.

solution.java

import java.util.*; class Solution { public int solution(int n, int[] lost, int[] reserve) { // uniforms 배열을 1둜 μ΄ˆκΈ°ν™” int[] uniforms = new int[n + 1]; Arrays.fill(uniforms, 1); // lost, reserve λ°°μ—΄λ‘œ uniforms λ°°μ—΄ μ΄ˆκΈ°ν™” for (int l : lost) { uniforms[l]--; } for (int r : reserve) { uniforms[r]++; } // κ°€λŠ₯ν•œ 경우 ꡐ볡 빌렀주기 for (int i = 1; i <= n; i++) { if (uniforms[i] == 0) { // λ§Œμ•½ μœ λ‹ˆνΌμ΄ μ—†λŠ” 학생이라면 if (i > 1 && uniforms[i - 1] == 2) { // 이전 학생 확인 uniforms[i]++; uniforms[i - 1]--; } else if (i < n && uniforms[i + 1] == 2) { // λ‹€μŒ 학생 확인 uniforms[i]++; uniforms[i + 1]--; } } } // μœ λ‹ˆνΌμ„ ν•˜λ‚˜ 이상 μ†Œμ§€ν•œ 학생 카운트 int count = 0; for (int i = 1; i <= n; i++) { if (uniforms[i] > 0) { count++; } } return count; } }
 

핡심 ν‚€μ›Œλ“œ

  • 배열을 1둜 μ΄ˆκΈ°ν™”ν•œ ν›„, μžƒμ–΄λ²„λ¦° μˆœμ„œμ™€ μ˜ˆλΉ„λ₯Ό κ°€μ Έμ˜¨ μ‚¬λžŒλ“€μ„ μˆœνšŒν•˜λ©° μ΄ˆκΈ°ν™” ν•œλ‹€.
  • 배열을 μ²˜μŒλΆ€ν„° μˆœνšŒν•˜λ©° 값이 0인 인덱슀의 μ•ž λ’€λ‘œ 값을 μ‘°νšŒν•˜κ³ , λ§Œμ•½ 2라면 ν•΄λ‹Ή 인덱슀의 값을 -1, +1ν•˜λ©° μ‘°μ •ν•œλ‹€.
 

κ²°λ‘ !

  • νƒμš•λ²•μ΄λž€ ν•΄λ‹Ή μˆœκ°„μ— 졜적인 닡을 μ„ νƒν•˜μ—¬ κ²°κ³Όλ₯Ό λ„μΆœν•˜λŠ” μ•Œκ³ λ¦¬μ¦˜μ΄λ‹€.
  • ν•΄λ‹Ή 문제의 경우 배열을 톡해 이전 μˆœμ„œμ™€ λ‹€μŒ μˆœμ„œμ˜ 결괏값을 μ ‘κ·Όν•˜κ³ , ν•΄λ‹Ή μˆœμ„œμ˜ 결괏λ₯Ό λ„μΆœν•΄λ‚Ό 수 μžˆμ—ˆλ‹€.
 
Share article

More articles

See more posts

πŸ‘¨πŸ»β€πŸ’»DriedPollack's Blog