Development/CodingTest
[๋ฐฑ์ค] Java ์ซ์์นด๋ 2
Kirok Kim
2021. 12. 20. 21:50
1.
import java.util.Scanner;
public class Test {
public static void main(String[] args) throws IOException {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
sc.nextLine();
String ns = sc.nextLine();
int m = sc.nextInt();
sc.nextLine();
String ms = sc.nextLine();
String[] na = ns.split(" ");
String[] ma = ms.split(" ");
int[] answer = new int[m];
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
if (na[j].equals(ma[i])) {
answer[i]++;
}
}
if (i == m - 1) {
System.out.print(answer[i]);
} else {
System.out.print(answer[i] + " ");
}
}
}
}
- ์ต์ด์๋ ์๊ธฐ ๋ด์ฉ์ผ๋ก ์ฝ๋ฉ์ ํ์๋ค. ํ๋ฐ ์๊ฐ์ด๊ณผ.. ๊ธฐ์กด์ ํ๋ก๊ทธ๋๋จธ์ค๋์ ๋ค๋ฅด๊ฒ ์ผ๋ง๋ ํจ์จ์ ์ผ๋ก ์ฝ๋ฉ์ ํ๋์ง ์ธก์ ํ์๋ค.
2.
package tttt;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Test {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
String ns =br.readLine();
int m =Integer.parseInt(br.readLine());
String ms = br.readLine();
String[] na = ns.split(" ");
String[] ma = ms.split(" ");
int[] answer = new int[m];
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
if (na[j].equals(ma[i])) {
answer[i]++;
}
}
if (i == m - 1) {
System.out.print(answer[i]);
} else {
System.out.print(answer[i] + " ");
}
}
}
}
- ๋ค์์ Scanner๋์ฒดํ BufferedReader๋ฅผ ์ฌ์ฉํ์ผ๋ ๋ง์ฐฌ๊ฐ์ง๋ก ์๊ฐ ์ด๊ณผ๋ค..
- java์์ Scanner์ bufferdReader์ ๊ฒฝ์ฐ ์๋์ฐจ์ด๊ฐ ๊ฝค ๋๋ค. ๊ทธ๋ฐ๋ฐ๋ ๋ถ๊ตฌํ๊ณ ์๊ฐ์ด ์ด๊ณผ๊ฐ ๋๋ค๋ฉด ์ด์ค for๋ฌธ์์ ์๊ฐ์ ๋ง์ด ์ก๋ ๊ฒ ๊ฐ๋ค.
- ํฅ์๋ for๋ฌธ๊ณผ ์ผ๋ฐ for๋ฌธ๊ณผ ์๋์ฐจ์ด๋ ์ ๋ฐ์ ์ผ๋ก ํฅ์๋ for๋ฌธ์ด ์กฐ๊ธ ๋ ๋ง์ด ๊ฑธ๋ฆฐ๋ค๊ณ ํ๋ค.
3 .์ด๋ถ๋ฒ์ผ๋ก ํธ๋ ๋ฒ
- 1. scanner
๋๋ณด๊ธฐ
๋๋ณด๊ธฐ
import java.util.Arrays;
import java.util.StringTokenizer;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int N = in.nextInt();
int[] arr = new int[N];
for(int i = 0; i < N; i++) {
arr[i] = in.nextInt();
}
Arrays.sort(arr); // ์ด๋ถ ํ์์ ํ๊ธฐ ์ํด์๋ ๋ฐ๋์ ์ ๋ ฌ๋์ด์์ด์ผ ํ๋ค.
int M = in.nextInt();
StringBuilder sb = new StringBuilder();
for(int i = 0; i < M; i++) {
int key = in.nextInt();
// upperBound์ lowerBound์ ์ฐจ์ด ๊ฐ์ ๊ตฌํ๋ค.
sb.append(upperBound(arr, key) - lowerBound(arr, key)).append(' ');
}
System.out.println(sb);
}
private static int lowerBound(int[] arr, int key) {
int lo = 0;
int hi = arr.length;
// lo๊ฐ hi๋ ๊ฐ์์ง ๋ ๊น์ง ๋ฐ๋ณต
while (lo < hi) {
int mid = (lo + hi) / 2; // ์ค๊ฐ์์น๋ฅผ ๊ตฌํ๋ค.
/*
* key ๊ฐ์ด ์ค๊ฐ ์์น์ ๊ฐ๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ๊ฒฝ์ฐ
*
* (์ค๋ณต ์์์ ๋ํด ์ผ์ชฝ์ผ๋ก ํ์ํ๋๋ก ์๊ณ๋ฅผ ๋ด๋ฆฐ๋ค.)
*/
if (key <= arr[mid]) {
hi = mid;
}
else {
lo = mid + 1;
}
}
return lo;
}
private static int upperBound(int[] arr, int key) {
int lo = 0;
int hi = arr.length;
// lo๊ฐ hi๋ ๊ฐ์์ง ๋ ๊น์ง ๋ฐ๋ณต
while (lo < hi) {
int mid = (lo + hi) / 2; // ์ค๊ฐ์์น๋ฅผ ๊ตฌํ๋ค.
// key๊ฐ์ด ์ค๊ฐ ์์น์ ๊ฐ๋ณด๋ค ์์ ๊ฒฝ์ฐ
if (key < arr[mid]) {
hi = mid;
}
// ์ค๋ณต์์์ ๊ฒฝ์ฐ else์์ ์ฒ๋ฆฌ๋๋ค.
else {
lo = mid + 1;
}
}
return lo;
}
}
- ์์ ์ฝ๋๊ฐ ๊ทธ๋๋ ๋์ ์ ์ผ ์ต์ ๊ฒ์ด๋ค.
for(int i = 0; i < M; i++) {
int key = in.nextInt();
// upperBound์ lowerBound์ ์ฐจ์ด ๊ฐ์ ๊ตฌํ๋ค.
sb.append(upperBound(arr, key) - lowerBound(arr, key)).append(' ');
}
System.out.println(sb);
}
- lowerBound์ upperBound์ ์์ฑ ์ด์ ๋ ์ด๋ถ๋ฒ์ผ๋ก ์ฐพ์ ์ค๋ณต๊ฐ์ ์ธ๋ฑ์ค๋ฅผ ๋นผ์ ๊ทธ ๊ฐฏ์๋ฅผ ๋ฐํํ๊ธฐ ์ํด์์ด๋ค.
private static int lowerBound(int[] arr, int key) {
int lo = 0;
int hi = arr.length;
// lo๊ฐ hi๋ ๊ฐ์์ง ๋ ๊น์ง ๋ฐ๋ณต
while (lo < hi) {
int mid = (lo + hi) / 2; // ์ค๊ฐ์์น๋ฅผ ๊ตฌํ๋ค.
/*
* key ๊ฐ์ด ์ค๊ฐ ์์น์ ๊ฐ๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ๊ฒฝ์ฐ
*
* (์ค๋ณต ์์์ ๋ํด ์ผ์ชฝ์ผ๋ก ํ์ํ๋๋ก ์๊ณ๋ฅผ ๋ด๋ฆฐ๋ค.)
*/
if (key <= arr[mid]) {
hi = mid;
}
else {
lo = mid + 1;
}
}
return lo;
}
- ์ฐ์ lowerBound๋ ์ค๋ณต ๊ฐ ์ค ์ธ๋ฑ์ค๊ฐ ์ ์ผ ๋ฎ์ ์๋ฅผ ์ฐพ๋ ๊ฒ์ด๊ณ
private static int upperBound(int[] arr, int key) {
int lo = 0;
int hi = arr.length;
// lo๊ฐ hi๋ ๊ฐ์์ง ๋ ๊น์ง ๋ฐ๋ณต
while (lo < hi) {
int mid = (lo + hi) / 2; // ์ค๊ฐ์์น๋ฅผ ๊ตฌํ๋ค.
// key๊ฐ์ด ์ค๊ฐ ์์น์ ๊ฐ๋ณด๋ค ์์ ๊ฒฝ์ฐ
if (key < arr[mid]) {
hi = mid;
}
// ์ค๋ณต์์์ ๊ฒฝ์ฐ else์์ ์ฒ๋ฆฌ๋๋ค.
else {
lo = mid + 1;
}
}
return lo;
}
}
- upperBound๋ ์ค๋ณต ๊ฐ ์ค ์ธ๋ฑ์ค๊ฐ ์ ์ผ ๋์ ์๋ฅผ ์ฐพ๋ ๊ฒ์ด๋ค.
- 2. BufferedReader+StringTokenizer
๋๋ณด๊ธฐ
๋๋ณด๊ธฐ
import java.util.Arrays;
import java.util.StringTokenizer;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
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 M = Integer.parseInt(br.readLine());
st = new StringTokenizer(br.readLine()," ");
StringBuilder sb = new StringBuilder();
for(int i = 0; i < M; i++) {
int key = Integer.parseInt(st.nextToken());
// upperBound์ lowerBound์ ์ฐจ์ด ๊ฐ์ ๊ตฌํ๋ค.
sb.append(upperBound(arr, key) - lowerBound(arr, key)).append(' ');
}
System.out.println(sb);
}
private static int lowerBound(int[] arr, int key) {
int lo = 0;
int hi = arr.length;
// lo๊ฐ hi๋ ๊ฐ์์ง ๋ ๊น์ง ๋ฐ๋ณต
while (lo < hi) {
int mid = (lo + hi) / 2; // ์ค๊ฐ์์น๋ฅผ ๊ตฌํ๋ค.
/*
* key ๊ฐ์ด ์ค๊ฐ ์์น์ ๊ฐ๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ๊ฒฝ์ฐ
*
* (์ค๋ณต ์์์ ๋ํด ์ผ์ชฝ์ผ๋ก ํ์ํ๋๋ก ์๊ณ๋ฅผ ๋ด๋ฆฐ๋ค.)
*/
if (key <= arr[mid]) {
hi = mid;
}
else {
lo = mid + 1;
}
}
return lo;
}
private static int upperBound(int[] arr, int key) {
int lo = 0;
int hi = arr.length;
// lo๊ฐ hi๋ ๊ฐ์์ง ๋ ๊น์ง ๋ฐ๋ณต
while (lo < hi) {
int mid = (lo + hi) / 2; // ์ค๊ฐ์์น๋ฅผ ๊ตฌํ๋ค.
// key๊ฐ์ด ์ค๊ฐ ์์น์ ๊ฐ๋ณด๋ค ์์ ๊ฒฝ์ฐ
if (key < arr[mid]) {
hi = mid;
}
// ์ค๋ณต์์์ ๊ฒฝ์ฐ else์์ ์ฒ๋ฆฌ๋๋ค.
else {
lo = mid + 1;
}
}
return lo;
}
}
- StringTokenizer
๋๋ณด๊ธฐ
๋๋ณด๊ธฐ
StringTokenizer st = new StringTokenizer(๋ฌธ์์ด);
StringTokenizer st = new StringTokenizer(๋ฌธ์์ด, ๊ธฐ์ค๋ฌธ์);
StringTokenizer st = new StringTokenizer(๋ฌธ์์ด,๊ธฐ์ค๋ฌธ์,True/False);
while(st.hasMoreTokens())
- ์ค๋ณต๋๋ ์ํ ์ธ๋ฑ์ค๊ฐ - ํํ ์ธ๋ฑ์ค๊ฐ
for(int i = 0; i < M; i++) {
int key = Integer.parseInt(st.nextToken());
// upperBound์ lowerBound์ ์ฐจ์ด ๊ฐ์ ๊ตฌํ๋ค.
sb.append(upperBound(arr, key) - lowerBound(arr, key)).append(' ');
}
System.out.println(sb);
}
4. HashMap
๋๋ณด๊ธฐ
๋๋ณด๊ธฐ
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.util.StringTokenizer;
import java.util.HashMap;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
/*
* HashMap<Key, Value>
* Key = ์
๋ ฅ๋๋ ์์
* Value = ์์์ ๊ฐ์(=์ค๋ณต ์
๋ ฅ ๋ ์์์ ์)
*/
HashMap<Integer, Integer> map = new HashMap<Integer, Integer>();
int N = Integer.parseInt(br.readLine());
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
for(int i = 0; i < N; i++) {
int key = Integer.parseInt(st.nextToken());
/*
* getOrDefault(key, defaultValue)
* key์ ๋ํด map์ ์ ์ฅ ๋ value๋ฅผ ๋ฐํํ๋ค.
* ๋ง์ฝ value๊ฐ ์์ ๊ฒฝ์ฐ defaultValue๊ฐ์ ๋ฐํํ๋ค.
*/
map.put(key, map.getOrDefault(key, 0) + 1);
}
int M = Integer.parseInt(br.readLine());
StringBuilder sb = new StringBuilder();
st = new StringTokenizer(br.readLine(), " ");
for(int i = 0; i < M; i++) {
int key = Integer.parseInt(st.nextToken());
sb.append(map.getOrDefault(key, 0)).append(' ');
}
System.out.println(sb);
}
}
for(int i = 0; i < N; i++) {
int key = Integer.parseInt(st.nextToken());
/*
* getOrDefault(key, defaultValue)
* key์ ๋ํด map์ ์ ์ฅ ๋ value๋ฅผ ๋ฐํํ๋ค.
* ๋ง์ฝ value๊ฐ ์์ ๊ฒฝ์ฐ defaultValue๊ฐ์ ๋ฐํํ๋ค.
*/
map.put(key, map.getOrDefault(key, 0) + 1);
}
- key์ ์นด๋์ ๊ฐ์ ๋ฃ๊ณ ๊ฐฏ์๋ฅผ ์ผ๋ค.
int M = Integer.parseInt(br.readLine());
StringBuilder sb = new StringBuilder();
st = new StringTokenizer(br.readLine(), " ");
for(int i = 0; i < M; i++) {
int key = Integer.parseInt(st.nextToken());
sb.append(map.getOrDefault(key, 0)).append(' ');
}
System.out.println(sb);
}
}
- key์ ๊ฐ์ ๋ถ๋ฌ์ StringBuilder๊ฐ์ฒด ๋ง๋ค๊ณ ์ถ๋ ฅ
์ถ์ฒ : https://st-lab.tistory.com/267
[๋ฐฑ์ค] 10816๋ฒ : ์ซ์ ์นด๋ 2 - JAVA [์๋ฐ]
https://www.acmicpc.net/problem/10816 10816๋ฒ: ์ซ์ ์นด๋ 2 ์ฒซ์งธ ์ค์ ์๊ทผ์ด๊ฐ ๊ฐ์ง๊ณ ์๋ ์ซ์ ์นด๋์ ๊ฐ์ N(1 ≤ N ≤ 500,000)์ด ์ฃผ์ด์ง๋ค. ๋์งธ ์ค์๋ ์ซ์ ์นด๋์ ์ ํ์๋ ์ ์๊ฐ ์ฃผ์ด์ง๋ค. ์ซ์ ์นด..
st-lab.tistory.com
๋ฐ์ํ