[programmers] 숫자 κ²Œμž„ - Java

숫자 κ²Œμž„μ—μ„œ AνŒ€κ³Ό BνŒ€μ˜ 사원듀이 각자 뢀여받은 숫자λ₯Ό λΉ„κ΅ν•˜μ—¬ BνŒ€μ΄ 얻을 수 μžˆλŠ” μ΅œλŒ€ μŠΉμ μ„ κ³„μ‚°ν•˜λŠ” λ¬Έμ œμ΄λ‹€. AνŒ€κ³Ό BνŒ€μ˜ 숫자λ₯Ό μ •λ ¬ν•œ ν›„, BνŒ€μ˜ ν”Œλ ˆμ΄μ–΄κ°€ AνŒ€μ˜ ν”Œλ ˆμ΄μ–΄λ₯Ό 이길 수 μžˆλŠ” κ²½μš°μ—λ§Œ μŠΉμ μ„ μ¦κ°€μ‹œν‚€λŠ” λ°©μ‹μœΌλ‘œ ν•΄κ²°ν•œλ‹€. μ˜ˆμ‹œλ‘œλŠ” AνŒ€μ΄ [5,1,3,7], BνŒ€μ΄ [2,2,6,8]일 λ•Œ BνŒ€μ€ μ΅œλŒ€ 3점을 얻을 수 μžˆλ‹€.
DriedPollack's avatar
Nov 11, 2024
[programmers] 숫자 κ²Œμž„ - Java

숫자 κ²Œμž„

문제 μ„€λͺ…

xx νšŒμ‚¬μ˜ 2xNλͺ…μ˜ 사원듀은 Nλͺ…μ”© 두 νŒ€μœΌλ‘œ λ‚˜λˆ  숫자 κ²Œμž„μ„ ν•˜λ €κ³  ν•©λ‹ˆλ‹€. 두 개의 νŒ€μ„ 각각 AνŒ€κ³Ό BνŒ€μ΄λΌκ³  ν•˜κ² μŠ΅λ‹ˆλ‹€. 숫자 κ²Œμž„μ˜ κ·œμΉ™μ€ λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.
  • λ¨Όμ € λͺ¨λ“  사원이 λ¬΄μž‘μœ„λ‘œ μžμ—°μˆ˜λ₯Ό ν•˜λ‚˜μ”© λΆ€μ—¬λ°›μŠ΅λ‹ˆλ‹€.
  • 각 사원은 λ”± ν•œ λ²ˆμ”© κ²½κΈ°λ₯Ό ν•©λ‹ˆλ‹€.
  • 각 κ²½κΈ°λ‹Ή AνŒ€μ—μ„œ ν•œ 사원이, BνŒ€μ—μ„œ ν•œ 사원이 λ‚˜μ™€ μ„œλ‘œμ˜ 수λ₯Ό κ³΅κ°œν•©λ‹ˆλ‹€. κ·Έλ•Œ μˆ«μžκ°€ 큰 μͺ½μ΄ μŠΉλ¦¬ν•˜κ²Œ 되고, μŠΉλ¦¬ν•œ 사원이 μ†ν•œ νŒ€μ€ μŠΉμ μ„ 1점 μ–»κ²Œ λ©λ‹ˆλ‹€.
  • λ§Œμ•½ μˆ«μžκ°€ κ°™λ‹€λ©΄ λˆ„κ΅¬λ„ μŠΉμ μ„ 얻지 μ•ŠμŠ΅λ‹ˆλ‹€.
전체 사원듀은 μš°μ„  λ¬΄μž‘μœ„λ‘œ μžμ—°μˆ˜λ₯Ό ν•˜λ‚˜μ”© λΆ€μ—¬λ°›μ•˜μŠ΅λ‹ˆλ‹€. κ·Έλ‹€μŒ AνŒ€μ€ λΉ λ₯΄κ²Œ μΆœμ „μˆœμ„œλ₯Ό μ •ν–ˆκ³  μžμ‹ λ“€μ˜ μΆœμ „ μˆœμ„œλ₯Ό BνŒ€μ—κ²Œ κ³΅κ°œν•΄λ²„λ ΈμŠ΅λ‹ˆλ‹€. BνŒ€μ€ 그것을 보고 μžμ‹ λ“€μ˜ μ΅œμ’… μŠΉμ μ„ κ°€μž₯ λ†’μ΄λŠ” λ°©λ²•μœΌλ‘œ νŒ€μ›λ“€μ˜ μΆœμ „ μˆœμ„œλ₯Ό μ •ν–ˆμŠ΅λ‹ˆλ‹€. μ΄λ•Œμ˜ BνŒ€μ΄ μ–»λŠ” μŠΉμ μ„ κ΅¬ν•΄μ£Όμ„Έμš”.
A νŒ€μ›λ“€μ΄ 뢀여받은 μˆ˜κ°€ μΆœμ „ μˆœμ„œλŒ€λ‘œ λ‚˜μ—΄λ˜μ–΄μžˆλŠ” λ°°μ—΄ A와 i번째 μ›μ†Œκ°€ BνŒ€μ˜ i번 νŒ€μ›μ΄ 뢀여받은 수λ₯Ό μ˜λ―Έν•˜λŠ” λ°°μ—΄ Bκ°€ μ£Όμ–΄μ§ˆ λ•Œ, B νŒ€μ›λ“€μ΄ 얻을 수 μžˆλŠ” μ΅œλŒ€ μŠΉμ μ„ return ν•˜λ„λ‘ solution ν•¨μˆ˜λ₯Ό μ™„μ„±ν•΄μ£Όμ„Έμš”.

μ œν•œμ‚¬ν•­

  • A와 B의 κΈΈμ΄λŠ” κ°™μŠ΅λ‹ˆλ‹€.
  • A와 B의 κΈΈμ΄λŠ” 1 μ΄μƒ 100,000 μ΄ν•˜μž…λ‹ˆλ‹€.
  • A와 B의 각 μ›μ†ŒλŠ” 1 μ΄μƒ 1,000,000,000 μ΄ν•˜μ˜ μžμ—°μˆ˜μž…λ‹ˆλ‹€.

μž…μΆœλ ₯ 예

A
B
result
[5,1,3,7]
[2,2,6,8]
3
[2,2,2,2]
[1,1,1,1]
0

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

μž…μΆœλ ₯ 예 #1
notion image
A νŒ€μ€ 숫자 5λ₯Ό 뢀여받은 νŒ€μ›μ΄ 첫번째둜 μΆœμ „ν•˜κ³ , μ΄μ–΄μ„œ 1,3,7을 뢀여받은 νŒ€μ›λ“€μ΄ μ°¨λ‘€λŒ€λ‘œ μΆœμ „ν•©λ‹ˆλ‹€.
B νŒ€μ›λ“€μ„ 4번, 2번, 3번, 1번의 μˆœμ„œλŒ€λ‘œ μΆœμ „μ‹œν‚¬ 경우 νŒ€μ›λ“€μ΄ 뢀여받은 μˆ«μžλ“€μ€ μ°¨λ‘€λŒ€λ‘œ 8,2,6,2κ°€ λ©λ‹ˆλ‹€. 그러면, 첫 번째, 두 번째, μ„Έ 번째 κ²½κΈ°μ—μ„œ μŠΉλ¦¬ν•˜μ—¬ 3점을 μ–»κ²Œ 되고, μ΄λ•Œκ°€ μ΅œλŒ€μ˜ μŠΉμ μž…λ‹ˆλ‹€.
μž…μΆœλ ₯ 예 #2
B νŒ€μ›λ“€μ„ μ–΄λ–€ μˆœμ„œλ‘œ μΆœμ „μ‹œμΌœλ„ BνŒ€μ˜ μŠΉμ μ€ 0μ μž…λ‹ˆλ‹€.

solution.java

import java.util.*; class Solution { public int solution(int[] A, int[] B) { Arrays.sort(A); Arrays.sort(B); int points = 0; int i = 0; // AνŒ€μ˜ 포인터 int j = 0; // BνŒ€μ˜ 포인터 while (i < A.length && j < B.length) { if (B[j] > A[i]) { points++; i++; } j++; } return points; } }
 

핡심 ν‚€μ›Œλ“œ

  • 포인터 iλŠ” AνŒ€μ„, 포인터 jλŠ” BνŒ€μ„ λ‚˜νƒ€λ‚Έλ‹€.
  • λ§Œμ•½ B[j] > A[i]λ©΄ BνŒ€μ˜ ν•΄λ‹Ή ν”Œλ ˆμ΄μ–΄κ°€ AνŒ€μ˜ ν”Œλ ˆμ΄μ–΄λ₯Ό 이길 수 μžˆμœΌλ―€λ‘œ pointsλ₯Ό μ¦κ°€μ‹œν‚€κ³  i++와 j++λ₯Ό ν•œλ‹€.
  • 그렇지 μ•ŠμœΌλ©΄ BνŒ€μ˜ ν”Œλ ˆμ΄μ–΄ B[j]λŠ” 이길 수 μ—†μœΌλ―€λ‘œ, j++만 μˆ˜ν–‰ν•˜μ—¬ BνŒ€μ˜ λ‹€μŒ ν”Œλ ˆμ΄μ–΄λ‘œ λ„˜μ–΄κ°„λ‹€.
 

κ²°λ‘ !

배열을 μ •λ ¬ν•˜κ³ , 각 μš”μ†Œλ“€μ„ ν•˜λ‚˜μ”© λΉ„κ΅ν•¨μœΌλ‘œμ¨ ν•΄λ‹Ή 문제λ₯Ό ν’€ 수 μžˆμ—ˆλ‹€.
 
Share article

More articles

See more posts

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