반응형
🔺 문제
2548번: 대표 자연수
첫째 줄에는 자연수의 개수 N이 입력된다. N은 1 이상 20,000 이하이다. 둘째 줄에는 N개의 자연수가 빈칸을 사이에 두고 입력되며, 이 수들은 모두 1 이상 10,000 이하이다.
www.acmicpc.net
🔺 코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
import java.util.*;
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader((new InputStreamReader((System.in))));
int N = Integer.parseInt((br.readLine()));
int[] arr = new int[N];
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
for(int i = 0 ; i < N ; i++) {
arr[i] = Integer.parseInt(st.nextToken());
}
Arrays.sort(arr); // 중앙값 탐색 위해 정렬
// 배열의 길이가 짝수와 홀수인 경우에 따라 중앙값 인덱스가 다르므로 조정
int mid = (arr.length % 2 == 0) ? arr[arr.length / 2 - 1] : arr[arr.length / 2];
System.out.println(mid);
}
}
|
cs |
🧩 해결 아이디어
• 정렬, 수학 (중앙값)
- 배열 값들 간 차이의 합을 최소로 하기 위해서는 중앙값을 출력하면 된다. (배열 길이 활용)
- 시간 복잡도 : O(N log N)
🔺 다른 풀이들
- 누적합 + 카운팅 정렬을 활용한 것도..! (시간 복잡도 : O(N + Q)
[자바] 백준 2548 - 대표 자연수 (java)
문제 : boj2548 필요 알고리즘 개념 정렬 데이터를 정렬하는 방법을 알아야 한다. 누적합 누적합을 사용해 이 문제를 풀 수 있다. 수학 - 중앙값(median) 누적합을 사용하지 않고, 수학의 중앙값 개념
nahwasa.com
💬 느낀 점
이상하게 풀다가 왜 맞았지...?하고 보니까 중앙값을 구하는 것이 맞았던 것이다..ㅎ
1회독 | 2회독 | 3회독 | 4회독 | 5회독 |
V | 12.21 | 240219 |
(+ 12.21 2회독)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
import java.util.*;
import java.io.*;
public class Main {
static int N;
static int[] arr;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
N = Integer.parseInt(br.readLine());
arr = new int[N];
st = new StringTokenizer(br.readLine(), " ");
for(int i = 0 ; i < N ; i++) {
arr[i] = Integer.parseInt(st.nextToken());
}
Arrays.sort(arr);
System.out.println(N % 2 == 0 ? arr[N / 2 - 1] : arr[N / 2]);
}
}
|
cs |
(+ 240219 3회독)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
import java.util.*;
import java.io.*;
public class Main {
static int N;
static int[] arr;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
N = Integer.parseInt(br.readLine());
arr = new int[N];
st = new StringTokenizer(br.readLine() , " ");
for(int i = 0 ; i < N ; i++) {
arr[i] = Integer.parseInt(st.nextToken());
}
Arrays.sort(arr);
System.out.println(arr[(N-1) /2]);
}
}
|
cs |
(참고)
백준 2548번 : 대표 자연수(Java)
https://www.acmicpc.net/problem/2548 2548번: 대표 자연수 첫째 줄에는 자연수의 개수 N이 입력된다. N은 1 이상 20,000 이하이다. 둘째 줄에는 N개의 자연수가 빈칸을 사이에 두고 입력되며, 이 수들은 모두 1
today-retrospect.tistory.com
반응형
'코테 > 백준' 카테고리의 다른 글
[백준/JAVA] 1251번: 단어 나누기 (0) | 2023.11.30 |
---|---|
[백준/JAVA] 18114번: 블랙 프라이데이 (0) | 2023.11.30 |
[백준/JAVA] 14929번: 귀찮아 (SIB) (0) | 2023.11.28 |
[백준/JAVA] 2573번: 빙산 (0) | 2023.10.06 |
[백준/JAVA] 2506번: 점수계산 (0) | 2023.10.06 |