๋ฌธ์ ์ค๋ช
https://school.programmers.co.kr/learn/courses/30/lessons/1845
ํ๋ก๊ทธ๋๋จธ์ค
SW๊ฐ๋ฐ์๋ฅผ ์ํ ํ๊ฐ, ๊ต์ก, ์ฑ์ฉ๊น์ง Total Solution์ ์ ๊ณตํ๋ ๊ฐ๋ฐ์ ์ฑ์ฅ์ ์ํ ๋ฒ ์ด์ค์บ ํ
programmers.co.kr
๋น์ ์ ํฐ์ผ๋ชฌ์ ์ก๊ธฐ ์ํ ์ค๋ ์ฌํ ๋์, ํ ๋ฐ์ฌ๋์ ์ฐ๊ตฌ์ค์ ๋์ฐฉํ์ต๋๋ค. ํ ๋ฐ์ฌ๋์ ๋น์ ์๊ฒ ์์ ์ ์ฐ๊ตฌ์ค์ ์๋ ์ด N ๋ง๋ฆฌ์ ํฐ์ผ๋ชฌ ์ค์์ N/2๋ง๋ฆฌ๋ฅผ ๊ฐ์ ธ๊ฐ๋ ์ข๋ค๊ณ ํ์ต๋๋ค.
ํ ๋ฐ์ฌ๋ ์ฐ๊ตฌ์ค์ ํฐ์ผ๋ชฌ์ ์ข
๋ฅ์ ๋ฐ๋ผ ๋ฒํธ๋ฅผ ๋ถ์ฌ ๊ตฌ๋ถํฉ๋๋ค. ๋ฐ๋ผ์ ๊ฐ์ ์ข
๋ฅ์ ํฐ์ผ๋ชฌ์ ๊ฐ์ ๋ฒํธ๋ฅผ ๊ฐ์ง๊ณ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ์ฐ๊ตฌ์ค์ ์ด 4๋ง๋ฆฌ์ ํฐ์ผ๋ชฌ์ด ์๊ณ , ๊ฐ ํฐ์ผ๋ชฌ์ ์ข
๋ฅ ๋ฒํธ๊ฐ [3๋ฒ, 1๋ฒ, 2๋ฒ, 3๋ฒ]์ด๋ผ๋ฉด ์ด๋ 3๋ฒ ํฐ์ผ๋ชฌ ๋ ๋ง๋ฆฌ, 1๋ฒ ํฐ์ผ๋ชฌ ํ ๋ง๋ฆฌ, 2๋ฒ ํฐ์ผ๋ชฌ ํ ๋ง๋ฆฌ๊ฐ ์์์ ๋ํ๋
๋๋ค. ์ด๋, 4๋ง๋ฆฌ์ ํฐ์ผ๋ชฌ ์ค 2๋ง๋ฆฌ๋ฅผ ๊ณ ๋ฅด๋ ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ์ด 6๊ฐ์ง๊ฐ ์์ต๋๋ค.
- ์ฒซ ๋ฒ์งธ(3๋ฒ), ๋ ๋ฒ์งธ(1๋ฒ) ํฐ์ผ๋ชฌ์ ์ ํ
- ์ฒซ ๋ฒ์งธ(3๋ฒ), ์ธ ๋ฒ์งธ(2๋ฒ) ํฐ์ผ๋ชฌ์ ์ ํ
- ์ฒซ ๋ฒ์งธ(3๋ฒ), ๋ค ๋ฒ์งธ(3๋ฒ) ํฐ์ผ๋ชฌ์ ์ ํ
- ๋ ๋ฒ์งธ(1๋ฒ), ์ธ ๋ฒ์งธ(2๋ฒ) ํฐ์ผ๋ชฌ์ ์ ํ
- ๋ ๋ฒ์งธ(1๋ฒ), ๋ค ๋ฒ์งธ(3๋ฒ) ํฐ์ผ๋ชฌ์ ์ ํ
- ์ธ ๋ฒ์งธ(2๋ฒ), ๋ค ๋ฒ์งธ(3๋ฒ) ํฐ์ผ๋ชฌ์ ์ ํ
์ด๋, ์ฒซ ๋ฒ์งธ(3๋ฒ) ํฐ์ผ๋ชฌ๊ณผ ๋ค ๋ฒ์งธ(3๋ฒ) ํฐ์ผ๋ชฌ์ ์ ํํ๋ ๋ฐฉ๋ฒ์ ํ ์ข
๋ฅ(3๋ฒ ํฐ์ผ๋ชฌ ๋ ๋ง๋ฆฌ)์ ํฐ์ผ๋ชฌ๋ง ๊ฐ์ง ์ ์์ง๋ง, ๋ค๋ฅธ ๋ฐฉ๋ฒ๋ค์ ๋ชจ๋ ๋ ์ข
๋ฅ์ ํฐ์ผ๋ชฌ์ ๊ฐ์ง ์ ์์ต๋๋ค. ๋ฐ๋ผ์ ์ ์์์์ ๊ฐ์ง ์ ์๋ ํฐ์ผ๋ชฌ ์ข
๋ฅ ์์ ์ต๋๊ฐ์ 2๊ฐ ๋ฉ๋๋ค.
๋น์ ์ ์ต๋ํ ๋ค์ํ ์ข
๋ฅ์ ํฐ์ผ๋ชฌ์ ๊ฐ์ง๊ธธ ์ํ๊ธฐ ๋๋ฌธ์, ์ต๋ํ ๋ง์ ์ข
๋ฅ์ ํฐ์ผ๋ชฌ์ ํฌํจํด์ N/2๋ง๋ฆฌ๋ฅผ ์ ํํ๋ ค ํฉ๋๋ค. N๋ง๋ฆฌ ํฐ์ผ๋ชฌ์ ์ข
๋ฅ ๋ฒํธ๊ฐ ๋ด๊ธด ๋ฐฐ์ด nums๊ฐ ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง ๋, N/2๋ง๋ฆฌ์ ํฐ์ผ๋ชฌ์ ์ ํํ๋ ๋ฐฉ๋ฒ ์ค, ๊ฐ์ฅ ๋ง์ ์ข
๋ฅ์ ํฐ์ผ๋ชฌ์ ์ ํํ๋ ๋ฐฉ๋ฒ์ ์ฐพ์, ๊ทธ๋์ ํฐ์ผ๋ชฌ ์ข
๋ฅ ๋ฒํธ์ ๊ฐ์๋ฅผ return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํด์ฃผ์ธ์.
์ ํ ์ฌํญ
- nums๋ ํฐ์ผ๋ชฌ์ ์ข ๋ฅ ๋ฒํธ๊ฐ ๋ด๊ธด 1์ฐจ์ ๋ฐฐ์ด์ ๋๋ค.
- nums์ ๊ธธ์ด(N)๋ 1 ์ด์ 10,000 ์ดํ์ ์์ฐ์์ด๋ฉฐ, ํญ์ ์ง์๋ก ์ฃผ์ด์ง๋๋ค.
- ํฐ์ผ๋ชฌ์ ์ข ๋ฅ ๋ฒํธ๋ 1 ์ด์ 200,000 ์ดํ์ ์์ฐ์๋ก ๋ํ๋ ๋๋ค.
- ๊ฐ์ฅ ๋ง์ ์ข ๋ฅ์ ํฐ์ผ๋ชฌ์ ์ ํํ๋ ๋ฐฉ๋ฒ์ด ์ฌ๋ฌ ๊ฐ์ง์ธ ๊ฒฝ์ฐ์๋, ์ ํํ ์ ์๋ ํฐ์ผ๋ชฌ ์ข ๋ฅ ๊ฐ์์ ์ต๋๊ฐ ํ๋๋ง return ํ๋ฉด ๋ฉ๋๋ค.
์ ์ถ๋ ฅ ์
nums | result |
[3, 1, 2, 3] | 2 |
[3, 3, 3, 2, 2, 4] | 3 |
[3, 3, 3, 2, 2, 2] | 2 |
์ ์ถ๋ ฅ ์ ์ค๋ช
์ ์ถ๋ ฅ ์ #1
- ๋ฌธ์ ์ ์์์ ๊ฐ์ต๋๋ค.
์ ์ถ๋ ฅ ์ #2
- 6๋ง๋ฆฌ์ ํฐ์ผ๋ชฌ์ด ์์ผ๋ฏ๋ก, 3๋ง๋ฆฌ์ ํฐ์ผ๋ชฌ์ ๊ณจ๋ผ์ผ ํฉ๋๋ค.
- ๊ฐ์ฅ ๋ง์ ์ข
๋ฅ์ ํฐ์ผ๋ชฌ์ ๊ณ ๋ฅด๊ธฐ ์ํด์๋ 3๋ฒ ํฐ์ผ๋ชฌ ํ ๋ง๋ฆฌ, 2๋ฒ ํฐ์ผ๋ชฌ ํ ๋ง๋ฆฌ, 4๋ฒ ํฐ์ผ๋ชฌ ํ ๋ง๋ฆฌ๋ฅผ ๊ณ ๋ฅด๋ฉด ๋๋ฉฐ,
๋ฐ๋ผ์ 3์ return ํฉ๋๋ค.
์ ์ถ๋ ฅ ์ #3
- 6๋ง๋ฆฌ์ ํฐ์ผ๋ชฌ์ด ์์ผ๋ฏ๋ก, 3๋ง๋ฆฌ์ ํฐ์ผ๋ชฌ์ ๊ณจ๋ผ์ผ ํฉ๋๋ค.
- ๊ฐ์ฅ ๋ง์ ์ข ๋ฅ์ ํฐ์ผ๋ชฌ์ ๊ณ ๋ฅด๊ธฐ ์ํด์๋ 3๋ฒ ํฐ์ผ๋ชฌ ํ ๋ง๋ฆฌ์ 2๋ฒ ํฐ์ผ๋ชฌ ๋ ๋ง๋ฆฌ๋ฅผ ๊ณ ๋ฅด๊ฑฐ๋, ํน์ 3๋ฒ ํฐ์ผ๋ชฌ ๋ ๋ง๋ฆฌ์ 2๋ฒ ํฐ์ผ๋ชฌ ํ ๋ง๋ฆฌ๋ฅผ ๊ณ ๋ฅด๋ฉด ๋ฉ๋๋ค.
- ๋ฐ๋ผ์ ์ต๋ ๊ณ ๋ฅผ ์ ์๋ ํฐ์ผ๋ชฌ ์ข ๋ฅ์ ์๋ 2์ ๋๋ค.
๋ด๊ฐ ์์ฑํ ์ฝ๋
import java.util.*;
class Solution {
public int solution(int[] nums) {
int answer = 0;
// Key ๊ฐ๊ณผ ํ์์ธ Value๋ฅผ ์ ์ฅํ HashMap ์์ฑ
HashMap<Integer, Integer> map = new HashMap<>();
// ๋ฐ๋ณต๋ฌธ์ ํ์ฉํ์ฌ nums ๋ฐฐ์ด ์ํ
for (int n : nums) {
// n์ Key ๊ฐ์ผ๋ก ๋ฃ๊ณ Value์ ํ์ ๊ณ์ฐ
// ์ค๋ณต๋ ๊ฐ์ด๋ผ๋ฉด Value +1
map.put(n, map.getOrDefault(n, 0) + 1);
}
// length์ nums์ ์ ๋ฐ ๊ธธ์ด ์ ์ฅ
int length = nums.length / 2;
// ๋ง์ฝ map์ ๊ธธ์ด๊ฐ length๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ์ ๊ฒฝ์ฐ
if (map.size() >= length) {
// answer์ length ๊ฐ ์ ์ฅ
answer = length;
} else {
// ๊ทธ๋ ์ง ์๋ค๋ฉด map์ ๊ธธ์ด ์ ์ฅ
answer = map.size();
}
// answer ๋ฐํ
return answer;
}
}
๋ฌธ์ ๋ฅผ ํ๊ธฐ ์ํด ์๊ฐํ ๋ฐฉํฅ
- ์ด์ ํ์๋ HashMap์ด ๋จธ๋ฆฌ ์์ ๊ฐ๋ํด์ HashMap์ผ๋ก ๋์ ํ๋ค.
- ๊ฐ๊ฐ์ ์ซ์๋ฅผ Key๋ก ํ์๋ฅผ Value๋ก ์๊ฐํ๊ณ ๋ฐฐ์ด์ ๋ชจ๋ ์๋ฅผ ์ํํ ๋ค์ HashMap์ ๊ธธ์ด๋ฅผ ๊ณ์ฐํ๋ค.
- ๊ธธ์ด๊ฐ nums ๋ฐฐ์ด์ ์ ๋ฐ ๊ธธ์ด๋ณด๋ค ํฌ๋ค๋ฉด ์ ๋ฐ ๊ธธ์ด๋ก, ์๋ค๋ฉด HashMap ๊ธธ์ด๋ก answer์ ์ ์ฅํ ํ ๋ฐํํ๋ฉด ๋๋ค๊ณ ์๊ฐํ๋ค.
์ข ๋ ๊ฐํธํ ๋ฐฉ๋ฒ
import java.util.*;
class Solution {
public int solution(int[] nums) {
int answer = 0;
// nums์ ๊ฐ์ ์ ์ฅํ HashSet ์์ฑ
HashSet<Integer> set = new HashSet<>();
// ๋ฐ๋ณต๋ฌธ์ ํ์ฉํ์ฌ nums ๋ฐฐ์ด ์ํ
for (int n : nums) {
// Set์ ๊ฐ๊ฐ์ ๊ฐ ์ ์ฅ
set.add(n);
}
// length์ nums์ ์ ๋ฐ ๊ธธ์ด ์ ์ฅ
int length = nums.length / 2;
// ๋ง์ฝ set์ ๊ธธ์ด๊ฐ length๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ์ ๊ฒฝ์ฐ
if (set.size() >= length) {
// answer์ length ๊ฐ ์ ์ฅ
answer = length;
} else {
// ๊ทธ๋ ์ง ์๋ค๋ฉด set์ ๊ธธ์ด ์ ์ฅ
answer = set.size();
}
// answer ๋ฐํ
return answer;
}
}
๋ฌธ์ ๋ฅผ ํ๊ธฐ ์ํด ์๊ฐํ ๋ฐฉํฅ
- ํ์ง๋ง ์๊ฐํด๋ณด๋ '๊ตณ์ด HashMap์ ์ฌ์ฉํด์ ๋ฌธ์ ๋ฅผ ํ์ด์ผ ํ ๊น?' ํ๋ ์๋ฌธ์ด ๋ค์๋ค.
- Set ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ๋ฉด ์ค๋ณต ๊ฐ์ ์๋์ผ๋ก ์ญ์ ๋๊ณ ๊ทธ๋ผ ๋ ๊ฐํธํ๊ฒ ๊ธธ์ด๋ฅผ ๊ตฌํ๊ณ answer ๊ฐ์ ๋ฐํํ ์ ์์ง ์์๊น ์๊ฐํ๋ค.
'๐งฉ ํ๋ก๊ทธ๋๋จธ์ค > ๐ต ์๊ณ ๋ฆฌ์ฆ ํ์ด(Java)' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ํ๋ก๊ทธ๋๋จธ์ค/Java] ์์ (1) | 2025.04.07 |
---|---|
[ํ๋ก๊ทธ๋๋จธ์ค/Java] ์ ํ๋ฒํธ ๋ชฉ๋ก (0) | 2025.04.07 |
[ํ๋ก๊ทธ๋๋จธ์ค/Java] ์์ฃผํ์ง ๋ชปํ ์ ์ (2) | 2025.04.03 |
[ํ๋ก๊ทธ๋๋จธ์ค/Java] H-index (0) | 2025.04.02 |
[ ํ๋ก๊ทธ๋๋จธ์ค/Java ] ๊ฐ์ฅ ํฐ ์ (0) | 2025.04.01 |