
1. ๋ฌธ์
- ๋ฐฐ์ด๋ง์ ์ฌ์ฉํด์ ์๋์ ์กฐ๊ฑด์ ๋ถํฉํ๋ ๋ฉ์๋๋ฅผ ์์ฑํ์ธ์
- ์ฃผ์ด์ง ๋ฐฐ์ด์์ ๊ฐ์ฅ ๋ง์ด ๋ฐ๋ณต๋ ์ซ์์ ํด๋น ์ซ์๊ฐ ๋ฐ๋ณต๋ ๋น๋์๋ฅผ ์ ์ํ ๋ฐฐ์ด๋ก ๋ฆฌํดํ๋ ๋ฉ์๋๋ฅผ ์์ฑํ์ธ์
- ex) ๋ฐฐ์ด์์ 2๊ฐ 4๋ฒ ๋์จ ๊ฒฝ์ฐ, [2, 4] ๋ฅผ ๋ฆฌํด
- ํน์ ์ซ์๊ฐ ๋์ผํ ๋น๋์๋ก ๋์๋ค๋ฉด ์ ์ผ ์์ ์ซ์์ ๋น๋์๋ฅผ ๋ฆฌํดํฉ๋๋ค
import java.util.*;
public class Assignment01 {
public static void main (String[] args) {
int[] tc1 = new int[]{1, 2, 3, 2, 2, 4, 5, 2, 6, 4};
int[] tc2 = new int[]{1, 2, 3, 4, 5};
int[] tc3 = new int[]{1, 2, 2, 3, 3};
System.out.println(Arrays.toString(solution(tc1))); // [2, 4]
System.out.println(Arrays.toString(solution(tc2))); // [1, 1]
System.out.println(Arrays.toString(solution(tc3))); // [2, 2]
}
public static int[] solution(int[] arr) {
int maxCount = 0; //์ต๋ ๋ฑ์ฅ ํ์
int minNumber = Integer.MAX_VALUE; // ์ต๋ ๋ฑ์ฅ ํ์์ ์ซ์ ์ค ๊ฐ์ฅ ์์ ๊ฐ
//๋ฐฐ์ด ์ํ
for (int i = 0; i < arr.length; i++) {
int count = 0;
// ํ์ฌ ์ซ์์ ๋ฑ์ฅ ํ์ ๊ณ์ฐ
for (int j = 0; j < arr.length; j++) {
if (arr[i] == arr[j]) {
count++;
}
}
// ์ต๋ ๋ฑ์ฅ ํ์ ๊ฐฑ์
if (count > maxCount || (count == maxCount && arr[i] < minNumber)) {
maxCount = count;
minNumber = arr[i];
}
}
// ๊ฒฐ๊ณผ ๋ฐํ
return new int[]{minNumber, maxCount};
}
}
2. ํ์ด :
1. ์ธ๋ถ ๋ฐ๋ณต๋ฌธ :
๋ฐฐ์ด์ ๊ฐ ์์๋ฅผ ์ ํํ์ฌ ๊ธฐ์ค์ผ๋ก ์ผ๋๋ค.
์๋ฅผ ๋ค์ด, ์ฒซ ๋ฒ์งธ ์ซ์ 1์ ๊ธฐ์ค์ผ๋ก ๋ฐฐ์ด์์ ๋ช ๋ฒ ๋์๋์ง ํ์ธํ๋ค.
2. ๋ด๋ถ ๋ฐ๋ณต๋ฌธ :
๊ธฐ์ค ์ซ์์ ๋ฐฐ์ด์ ๋ชจ๋ ์ซ์๋ฅผ ๋น๊ตํ๋ฉฐ ๋ฑ์ฅ ํ์๋ฅผ ์ธ์ด์ค๋ค.
3. ์ต๋๊ฐ ๋น๊ต ๋ฐ ๊ฐฑ์ :
๋ง์ฝ ํ์ฌ ์ซ์์ ๋ฑ์ฅ ํ์๊ฐ maxCount๋ณด๋ค ํฌ๋ฉด ์๋ก์ด ๊ฐ์ ๊ธฐ๋กํ๋ค.
๋ฑ์ฅ ํ์๊ฐ ๋์ผํ ๊ฒฝ์ฐ ์ซ์๊ฐ ๋ ์์ ๊ฒฝ์ฐ๋ก ๊ฐฑ์ ํ๋ค.
์ด ์กฐ๊ฑด๋ฌธ์ ํ์ฌ ์ซ์๊ฐ "์ต๋ ๋ฑ์ฅ ํ์์ ๋น๊ตํ์ฌ ๋ ํฌ๊ฑฐ๋, ๋๋ ๋ฑ์ฅ ํ์๊ฐ ๊ฐ์ผ๋ฉด์ ์ซ์๊ฐ ๋ ์์ ๊ฒฝ์ฐ"๋ฅผ ํ์ธํ๋ค.
3.1 count > maxCount :
ํ์ฌ ์ซ์๊ฐ ์ง๊ธ๊น์ง ๋ณธ ์ซ์๋ค๋ณด๋ค ๋ ๋ง์ด ๋์๋์ง ํ์ธํ๋ ์กฐ๊ฑด์ด๋ค.
3.2 count == maxCount && arr[i] < minNumber :
ํ์ฌ ์ซ์๊ฐ ์ง๊ธ๊น์ง ์ต๊ณ ๋ฑ์ฅ ํ์์ ๊ฐ์๋ฐ, ์ซ์๊ฐ ๋ ์์์ง ํ์ธํ๋ ์กฐ๊ฑด์ด๋ค.
์๋ฅผ ๋ค์ด, 2์ 3์ด ๋๋ค 4๋ฒ ๋์๋๋ฐ, ์ซ์๊ฐ ๋ ์์ 2๋ฅผ ์ฐ์ ์ ํํ๋ค.
<๋์ ์ด๊ธฐ ์ ๊ทผ ๋ฐฉ์์ ๋ํ ๋ถ์>
๋์ ์ด๊ธฐ ๋ ผ๋ฆฌ์ ์ ๊ทผ ๋ฐฉ์์,
1. ๋ฐฐ์ด์ ์ํํ๋ฉฐ ๊ฐ ์์๋ฅผ ๊ธฐ์ค์ผ๋ก ๋๋จธ์ง ์์์ ๋น๊ต
2. ๊ฐ ์ซ์์ ๋ฑ์ฅ ํ์๋ฅผ ์ธ๊ณ , ๋ฑ์ฅ ํ์๊ฐ ์ต๋์ธ ์ซ์๋ฅผ ์ฐพ์.
3. ๋ฑ์ฅ ํ์๊ฐ ๊ฐ๋ค๋ฉด ์ซ์๊ฐ ๋ ์์ ๊ฒ์ ์ ํํจ.
์ํ์ :
1. ์ฌ๋ฐ๋ฅธ ๋ฌธ์ ์ ์:
for๋ฌธ์ผ๋ก ๋ฐฐ์ด์ ์ํํ๋ฉฐ ๊ฐ ์ซ์์ ๋ฑ์ฅ ํ์๋ฅผ ํ์ธํ๋ ค๋ ์์ด๋์ด.
์ต๋๊ฐ์ ๋น๊ตํ๋ฉด์ ๋ฑ์ฅ ํ์๋ฅผ ๊ฐฑ์ ํ๊ณ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๋ ค๋ ์ ๊ทผ์ ๋ฌธ์ ๋ฅผ ์ ํํ ์ดํดํ๊ณ ์๋ค๋ ์ฆ๊ฑฐ์๋ค.
2. ์กฐ๊ฑด ๋น๊ต์ ๊ฐ๋
i๋ฒ์งธ ์์์ ๋๋จธ์ง ์์๋ฅผ ๋น๊ตํ๋ ค๋ ๊ฒ์ ๋ฐฐ์ด์ ๋ฑ์ฅ ํ์๋ฅผ ๊ณ์ฐํ๋ ์ง๊ด์ ์ธ ๋ฐฉ๋ฒ์ด๋ค.
"์ต๋ ๋ฑ์ฅ ํ์"๋ฅผ ๊ฐฑ์ ํ๋ฉฐ ๋ต์ ์ฐพ์ผ๋ ค๋ ๋ฐฉํฅ์ ๋ฌธ์ ๋ฅผ ์ฌ๋ฐ๋ฅด๊ฒ ํ๊ธฐ ์ํ ํต์ฌ์ด๋ค.
๋ถ์กฑํ๋ ์ :
1. ํจ์จ์ฑ ๋ถ์กฑ :
i๋ฒ์งธ ์์๋ฅผ ๊ธฐ์ค์ผ๋ก ๋๋จธ์ง ๋ชจ๋ ์์๋ฅผ ํ์ธํ๋ ๋ฐฉ์์ ์ด์ค ๋ฐ๋ณต๋ฌธ์ด ํ์ํ๋ฐ ๊ทธ๊ฒ์ ๋ชปํ์๋ค.
๋ฐฐ์ด์ ํฌ๊ธฐ๊ฐ ํด ๊ฒฝ์ฐ , ์ฑ๋ฅ์ด ๋งค์ฐ ๋จ์ด์ง์ ์๋ค.
๋ฑ์ฅ ํ์๋ฅผ ํ์ธํ ๋ HashMap๊ณผ ๊ฐ์ ํจ์จ์ ์ธ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ํ์ฉํ์ง ๋ชปํฌ๋ค.
2. ๋ช ํํ์ง ์์ ์กฐ๊ฑด ์ค๋ช .
“i๋ฒ์งธ ์์์ ๋๋จธ์ง ์์๋ค๊ณผ ๊ฐ์์ง ๋ฉ์๋๋ฅผ ๊ฐ์ง๊ณ ํ์ธํด์ผ ํ๋ค”๋ผ๋ ์ ๊ทผ์ ์ดํด ๊ฐ๋ฅํ์ง๋ง, ์ด๋ฅผ ์ฝ๋๋ก ๊ตฌํํ ๋ ์กฐ๊ฑด์ ๊ตฌ์ฒด์ ์ผ๋ก ์ ์ํ์ง ์์๋ค.
์ : ๋ฑ์ฅ ํ์๋ฅผ ๋น๊ตํ๋ฉด์ ์ต๋๊ฐ์ ๊ฐฑ์ ํ๋ ์กฐ๊ฑด(if)์ ๋ถ๋ช ํ ํด์ผ ํ๋ค.
3. ๊ฒฐ๊ณผ ๋ฐํ์ ๊ตฌ์ฒด์ฑ ๋ถ์กฑ.
๋ฑ์ฅ ํ์๊ฐ ๋์ผํ ๊ฒฝ์ฐ, ์ซ์๊ฐ ๋ ์์ ๊ฒ์ ์ ํํ๋ค๋ ๋ฌธ์ ์กฐ๊ฑด์ด ๋ช ํํ ํฌํจ๋์ง ์์๋ค.
• ๋ฑ์ฅ ํ์๋ฅผ ํ์ธํ๊ณ ๊ฐฑ์ ํ๋ ๋ก์ง์ด ๋ ๊ตฌ์ฒด์ ์ผ๋ก ํ์ํ๋ค.
๋ณด์ ๋ฐฉ์
1. ํจ์จ์ ์ธ ๋ฑ์ฅ ํ์ ๊ณ์ฐ :
๋ฐฐ์ด ์ ์ฒด๋ฅผ ์ํํ๋ฉด์ ๋ฑ์ฅ ํ์๋ฅผ ํจ์จ์ ์ผ๋ก ๊ณ์ฐํ ์ ์๋ ๋ฐฉ๋ฒ(์ : HashMap ์ฌ์ฉ)์ ๋ฐฐ์ฐ๊ณ ์ ์ฉํด์ผ ํ๋ค.
์ด๋ ๊ฒ ํ๋ฉด ๋ชจ๋ ์ซ์์ ๋ฑ์ฅ ํ์๋ฅผ ํ ๋ฒ์ ์ํ๋ก ๊ณ์ฐํ ์ ์๋ค.
2. ์กฐ๊ฑด์ ๋ช ํํ :
๋ฑ์ฅ ํ์๊ฐ ์ต๋๊ฐ๋ณด๋ค ํฐ ๊ฒฝ์ฐ์, ๋์ผํ ๊ฒฝ์ฐ ๋ ์์ ์ซ์๋ฅผ ์ ํํ๋ ์กฐ๊ฑด์ ๋ช ํํ ๊ตฌํํ๋ค.
์ด๋ฅผ ์ํด ์กฐ๊ฑด๋ฌธ์ ๋๋์ด ๊ฐ๋ ์ฑ์ ๋์ด๋ ๊ฒ์ด ์ค์ํ๋ค.
3. ๋จ๊ณ๋ณ ํ์ด๋ก ๋ ผ๋ฆฌ๋ฅผ ๋ถ๋ฆฌ :
1๋จ๊ณ : ๊ฐ ์ซ์์ ๋ฑ์ฅ ํ์๋ฅผ ๊ณ์ฐํ๋ค.
2๋จ๊ณ : ๊ฐ์ฅ ๋ง์ด ๋ฑ์ฅํ ์ซ์์ ๋ฑ์ฅ ํ์๋ฅผ ์ฐพ๋๋ค.
์ด ๊ณผ์ ์ ๋ช ํํ ๋๋์ด ๋จ๊ณ๋ณ๋ก ์์ฑํ๋ฉด ๋ ผ๋ฆฌ๊ฐ ๋ ์ฝ๊ฒ ์ ๋ฆฌ๋๋ค.
3. ํจ์จ์ฑ์ ๊ณ ๋ คํ ์๊ฐ ๋ณต์ก๋๋ฅผ ์ค์ธ ์ฝ๋
์ฃผ์ ์์ด๋์ด :
1. HashMap ์ฌ์ฉ :
์ซ์๋ณ ๋ฑ์ฅ ํ์๋ฅผ ์ ์ฅํ๋ค.
HashMap์ ํค๋ ์ซ์, ๊ฐ์ ํด๋น ์ซ์์ ๋ฑ์ฅ ํ์์ด๋ค.
2. ํ ๋ฒ์ ์ํ๋ก ์ต๋๊ฐ ์ฐพ๊ธฐ :
HashMap์ ์ ์ฅ๋ ๊ฐ๋ค์ ์ํํ๋ฉฐ ์ต๋ ๋ฑ์ฅ ํ์์ ํด๋น ์ซ์๋ฅผ ์ฐพ๋๋ค.
๋ฑ์ฅ ํ์๊ฐ ๋์ผํ ๊ฒฝ์ฐ ๋ ์์ ์ซ์๋ฅผ ์ ํํ๋ค.
import java.util.*;
public class Assignment01 {
public static void main(String[] args) {
int[] tc1 = new int[]{1, 2, 3, 2, 2, 4, 5, 2, 6, 4};
int[] tc2 = new int[]{1, 2, 3, 4, 5};
int[] tc3 = new int[]{1, 2, 2, 3, 3};
System.out.println(Arrays.toString(solution(tc1))); // [2, 4]
System.out.println(Arrays.toString(solution(tc2))); // [1, 1]
System.out.println(Arrays.toString(solution(tc3))); // [2, 2]
}
public static int[] solution(int[] arr) {
//์ซ์๋ณ ๋ฑ์ฅ ํ์๋ฅผ ์ ์ฅํ HashMap
Map<Integer, Integer> frequencyMap = new HashMap<>();
// ๋ฐฐ์ด ์ํํ๋ฉฐ ๋ฑ์ฅ ํ์ ๊ณ์ฐ
for (int num : arr) {
frequencyMap.put(num, frequencyMap.getOrDefault(num,0)+1);
}
// ์ต๋ ๋ฑ์ฅ ํ์์ ํด๋น ์ซ์ ์ด๊ธฐํ
int maxCount = 0;
int minNumber = Integer.MAX_VALUE;
// HashMap ์ํํ๋ฉฐ ์ต๋ ๋ฑ์ฅ ํ์์ ์ซ์ ์ฐพ๊ธฐ
for (Map.Entry<Integer, Integer> entry : frequencyMap.entrySet()) {
int number = entry.getKey();
int count = entry.getValue();
// ์ต๋ ๋ฑ์ฅ ํ์ ๊ฐฑ์ ๋๋ ๋์ผ ํ์์ผ ๋ ๋ ์์ ์ซ์ ์ ํ
if (count > maxCount || (count == maxCount && number < minNumber)) {
maxCount = count;
minNumber = number;
}
}
// ๊ฒฐ๊ณผ ๋ฐํ
return new int[]{minNumber,maxCount};
}
ํ์ด :
1. HashMap์ ๋ฑ์ฅ ํ์ ์ ์ฅ :
frequencyMap.put(num, frequencyMap.getOrDefault(num, 0) +1)๋ฅผ ์ฌ์ฉํ์ฌ ์ซ์์ ๋ฑ์ฅ ํ์๋ฅผ ๊ณ์ฐํ๋ค.
frequencyMap.getOrDefaut(num, 0)๋ num์ด๋ผ๋ ์ซ์๊ฐ ์ด๋ฏธ frequencyMap์ ์์ผ๋ฉด, ๊ทธ ์ซ์๊ฐ ๋์จ ํ์๋ฅผ ๊ฐ์ ธ์จ๋ค.
์๋ค๋ฉด, ๊ธฐ๋ณธ๊ฐ 0์ ๊ฐ์ ธ์จ๋ค. ๊ทธ ํ์์ 1์ ๋ํด์ ํ์ฌ ์ซ์๊ฐ ๋์จ ํ์๋ฅผ ์ ๋ฐ์ดํธ ํ๋ค.
์ ๋ฌธ๋ฒ์ ์ฌ๋ฌ์ค๋ก ๋๋์ด์ ๋จ๊ณ๋ณ๋ก ์์ฑํ๋ฉด ์ด๋ ๋ค.
if (frequencyMap.containsKey(num)) { //์ซ์๊ฐ ์ด๋ฏธ ์๋์ง ํ์ธ
int count = frequencyMap.get(num); // ์ซ์๊ฐ ๋์จ ํ์๋ฅผ ๊ฐ์ ธ์ด
frequencyMap.put(num, count +1); // ํ์๋ฅผ 1์ ๋ํด์ ์ ์ฅ
} else {
frequencyMap.put(num, 1); // ์ฒ์ ๋ฑ์ฅํ ์ซ์๋ 1๋ก ์ ์ฅ
}
<๋จ๊ณ๋ณ ์ค๋ช >
1. frequencyMap.containsKey(num) :
num์ด๋ผ๋ ์ซ์๊ฐ ์ด๋ฏธ ๊ธฐ๋ก๋์ด ์๋์ง ํ์ธ
์ : frequencyMap์ 2๊ฐ ์ด๋ฏธ ๋ค์ด ์๋ค๋ฉด true, ์์ผ๋ฉด falsue๋ฅผ ๋ฐํ
2. ์ซ์๊ฐ ์์ผ๋ฉด ํ์๋ฅผ ๊ฐ์ ธ์์ 1์ฆ๊ฐ :
frequencyMap.get(num)์ num์ด ๋์จ ํ์๋ฅผ ๊ฐ์ ธ์จ๋ค.
๊ฐ์ ธ์จ ๊ฐ์ 1์ ๋ํด์ ๋ค์ ์ ์ฅํ๋ค.
3. ์ซ์๊ฐ ์์ผ๋ฉด 1๋ก ์ด๊ธฐํ
frequencyMap.put(num, 1)์ ์ฒ์ ๋ฑ์ฅํ ์ซ์๋ฅผ ๊ธฐ๋กํ๊ณ ํ์๋ฅผ 1๋ก ์ ์ฅ
4. ๋จ์ํ๋ ๋ฒ์ ์ ์ฝ๋
import java.util.*;
public class Assignment01 {
public static void main(String[] args) {
int[] tc1 = new int[]{1, 2, 3, 2, 2, 4, 5, 2, 6, 4};
int[] tc2 = new int[]{1, 2, 3, 4, 5};
int[] tc3 = new int[]{1, 2, 2, 3, 3};
System.out.println(Arrays.toString(solution(tc1))); // [2, 4]
System.out.println(Arrays.toString(solution(tc2))); // [1, 1]
System.out.println(Arrays.toString(solution(tc3))); // [2, 2]
}
public static int[] solution(int[] arr) {
// ์ซ์๋ณ ๋ฑ์ฅ ํ์๋ฅผ ์ ์ฅํ HashMap
Map<Integer,Integer> frequencyMap = new HashMap<>();
// ๋ฐฐ์ด ์ํํ๋ฉฐ ๋ฑ์ฅ ํ์ ๊ณ์ฐ
for (int num : arr) {
if (frequencyMap.containsKey(num)) { // ์ซ์๊ฐ ์ด๋ฏธ ์๋์ง ํ์ธ
int count = frequencyMap.get(num); //๋ฑ์ฅ ํ์๋ฅผ ๊ฐ์ ธ์ด
frequencyMap.put(num, count+1); // ํ์์ 1์ ๋ํด์ ์ ์ฅ
} else {
frequencyMap.put(num, 1); // ์ฒ์ ๋ฑ์ฅํ ์ซ์๋ 1๋ก ์ ์ฅ
}
}
//์ต๋ ๋ฑ์ฅ ํ์์ ํด๋น ์ซ์ ์ด๊ธฐํ
int maxCount = 0;
int minNumber = Integer.MAX_VALUE;
// HashMap ์ํํ๋ฉฐ ์ต๋ ๋ฑ์ฅ ํ์์ ์ซ์ ์ฐพ๊ธฐ
for (Map.Entry<Integer, Integer> entry : frequencyMap.entrySet()) {
int number = entry.getKey();
int count = entry.getValue();
// ์ต๋ ๋ฑ์ฅ ํ์ ๊ฐฑ์ ๋๋ ๋์ผ ํ์์ผ ๋ ๋ ์์ ์ซ์ ์ ํ
if (count > maxCount || (count == maxCount && number < minNumber)) {
maxCount = count;
minNumber = number;
}
}
//๊ฒฐ๊ณผ ๋ฐํ
return new int[]{minNumber, maxCount};
}
5. ์๋ ๋ฌธ๋ฒ vs ๋จ๊ณ๋ณ ์ฝ๋
์๋ ๋ฌธ๋ฒ :
frequencyMap.put(num, frequencyMap.getOrDefault(num, 0) +1);
๋จ๊ณ๋ณ ์ฝ๋ :
if (frequencyMap.containsKey(num)) {
int count = frequencyMap.get(num);
frequencyMap.put(num, count +1);
} else {
frequencyMap.put(num, 1);
}'๐ฐ๐ท ํ๊ตญ์ด (Korean) > Java Algorithm Coding Test' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [์คํฐ๋ ๊ณผ์ ] 3. ๋ฆฌ์คํธ(LinkedList) (0) | 2025.01.26 |
|---|---|
| [์คํฐ๋ ๊ณผ์ ] 2.์ฌ๊ท ๊ณผ์ (0) | 2025.01.26 |
| [Java] ๋๋จธ์ง๊ฐ 1์ด ๋๊ฒ ํ๋ ์ต์๊ฐ ์ฐพ๊ธฐ. (0) | 2025.01.25 |
| [Java] ๋ฐฐ์ด์ ํ๊ท ๊ตฌํ๊ธฐ_(์์ฑ๊ณผ ๋ฉ์๋์ ๊ตฌ๋ณ) (0) | 2025.01.25 |
| [Java] int x๋ก ์์ํ์ฌ x๋งํผ์ ๊ฐ๊ฒฉ์ผ๋ก n๊ฐ์ ๋ฐฐ์ด ๋ง๋ค๊ธฐ (0) | 2025.01.25 |