https://www.acmicpc.net/problem/1764
ํ๋ฆฐ ์ฝ๋
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(bf.readLine());
int N = Integer.parseInt(st.nextToken());
int M = Integer.parseInt(st.nextToken());
String[] nArr = new String[N]; // ๋ฃ๋ ๋ชปํ ์ฌ๋ ์ ์ฅ
String[] mArr = new String[M]; // ๋ณด๋ ๋ชปํ ์ฌ๋ ์ ์ฅ
String[] nmArr = new String[500000]; // ๋ฃ๋ ๋ณด๋ ๋ชปํ ์ฌ๋ ์ ์ฅ
int index = 0;
int count = 0;
// ๋ฃ๋ ๋ชปํ ์ฌ๋ ์
๋ ฅ
for(int i=0; i<nArr.length; i++)
nArr[i] = bf.readLine();
// ๋ณด๋ ๋ชปํ ์ฌ๋ ์
๋ ฅ
for(int i=0; i<mArr.length; i++)
mArr[i] = bf.readLine();
Arrays.sort(nArr);
Arrays.sort(mArr);
// for(int i=0; i<N; i++)
// System.out.print(nArr[i] + " ");
// System.out.println();
// for(int i=0; i<M; i++)
// System.out.print(mArr[i] + " ");
for(int i=0; i<nArr.length; i++) {
for(int j=0; j<mArr.length; j++) {
if(nArr[i].equals(mArr[j])) { // ๋ฃ๋ ๋ณด๋ ๋ชปํ์๋ => ์นด์ดํธ +1 , ์ ์ฅ
count ++;
nmArr[index ++] = nArr[i];
break;
}
}
}
System.out.println(count);
for(int i=0; i<nmArr.length; i++) {
if(nmArr[i] == null) break;
System.out.println(nmArr[i]);
}
bf.close();
}
}
ํ์ด
๊ฐ์ฅ ๋ฌด๋ํ๊ฒ ๋ฃ๋ ๋ชปํ ์ฌ๋์ ๋ช ๋จ - String nArr[] , ๋ณด๋ ๋ชปํ ์ฌ๋์ ๋ช ๋จ - String mArr[] ๋ฐฐ์ด์ ์ ์ธํ๊ณ ,
๋ฃ๋ ๋ณด๋ ๋ชปํ ์ฌ๋์ ๋ช ๋จ์ ์ ์ฅํ๊ธฐ ์ํด String nmArr[] ์ ์ ์ธํ๋ค.
๊ทธ ํ ๊ฐ ๋ฐฐ์ด์ ์์ ํ์์ ํตํด 2์ค for๋ฌธ์ ๋๋ ธ์ผ๋ ์๊ฐ์ด๊ณผ๊ฐ ๋ฐ์ํ๋ค.
์ฌ์ค ๋ฌธ์ ์์ N, M์ ๋ฒ์๋ 500,000 ์ด์ด์ ์์ ํ์์ผ๋ก ์ ๊ทผํ๊ธฐ ์ ์ ์๊ฐ์ด๊ณผ๊ฐ ๋ฐ์ํ ๊ฑฐ๋ผ๊ณ ์๊ฐ์ ํ์์ง๋ง ์ง์ ๊ตฌํํ๋ ์๊ฐ์ด๊ณผ๊ฐ ๋ฐ์ํ๋ค.
๋ String ์ค ํ String์ด ํฌํจ๋๋์ง ์๋๋์ง ์ด๋ป๊ฒ ํด๊ฒฐํด์ผ ํ ์ง ๊ณ ๋ฏผํ์ง๋ง ๋ ์ค๋ฅด์ง ์์๋ค.
๋ค๋ฅธ ์๋ฃ๊ตฌ์กฐ๋ก ์ ๊ทผํด์ผ ํ ๊ฒ ๊ฐ์ง๋ง ์๋ฃ๊ตฌ์กฐ๊ฐ ์์ง ๋ถ์กฑํ์ฌ ๋ค๋ฅธ ํ์ด๋ฅผ ์ฐธ๊ณ ํ๋ค.
์ ๋ต ์ฝ๋
import java.util.List;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.Set;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(bf.readLine());
int N = Integer.parseInt(st.nextToken()); // ๋ฃ๋ ๋ชปํ ์ฌ๋์ ์
int M = Integer.parseInt(st.nextToken()); // ๋ณด๋ ๋ชปํ ์ฌ๋์ ์
Set<String> hs = new HashSet<String>(); // ๋ฃ๋ ๋ชปํ ์ฌ๋ ์ ์ฅ
List<String> list = new ArrayList<String>();
for(int i=0; i<N; i++)
hs.add(bf.readLine()); // ๋ฃ๋ ๋ชปํ ์ฌ๋ ์ ์ฅ
for(int i=0; i<M; i++) {
String str = bf.readLine();
// ๋ณด๋ ๋ชปํ ์ฌ๋์ด ๋ฃ๋ ๋ชปํ ์ฌ๋์ ์์๊ฒฝ์ฐ => list์ ์ ์ฅ
if(hs.contains(str)) list.add(str);
}
Collections.sort(list);
System.out.println(list.size()); // ๋ฃ๋ ๋ณด๋ ๋ชปํ ์ฌ๋์ ์ => list์ ํฌ๊ธฐ
for(int i=0; i<list.size(); i++)
System.out.println(list.get(i));
bf.close();
}
}
ํ์ด
HastSet์ ์ด์ฉํด ๋ฃ๋ ๋ชปํ ์ฌ๋์ ์ง๋จ์ ๋ณด๋ ๋ชปํ ์ฌ๋์ด ํฌํจ๋๋์ง ์๋์ง ํ๋จํ ์ ์๋ค.
- HasbSet.contains()
์ ๋ต์ List์ ๋ด์์ ์ ์ฅํ๋ค.
๋ฃ๋ ๋ชปํ ์ฌ๋์ ์ ๋ ฅ๋ฐ๊ณ HashSet์ ์ ์ฅํ๋ค. => hs.add()
๊ทธ ํ ๋ณด๋ ๋ชปํ ์ฌ๋์ ์ ๋ ฅ๋ฐ์ ๋ ๋ง๋ค, ๋ฃ๋ ๋ชปํ ์ฌ๋์ ์ ์ฅํ HashSet์ ์๋๊ฒฝ์ฐ List์ ์ ์ฅํ๋ค.
์ต์ข ์ ์ผ๋ก ๋ช ๋จ์ ์ฌ์ ์์ผ๋ก ์ถ๋ ฅํ๋ฏ๋ก, List๋ฅผ ์ ๋ ฌํ๊ณ ๋ฃ๋ณด์ก์ ์๋ ๋ฆฌ์คํธ์ ํฌ๊ธฐ์ธ size()๊ฐ ๋๋ค.
์ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ๊ตฌํํ๋ฉด ์๊ฐ๋ณต์ก๋๊ฐ ํ์ ํ ์ค์ด๋ ๋ค.
์ด์ ์๊ฐ์ด๊ณผ ์ฝ๋์๋ O(500,000 * 500,000) ์๋ค๋ฉด ์๋ for๋ฌธ์ด 1๊ฐ์ด๋ฏ๋ก O(M)์ผ๋ก ๊ตฌํํ ์ ์๋ค.
* ๋ค์ํ ์๋ฃ๊ตฌ์กฐ์ ๋ํด ๋ ์ต์ํด์ ธ์ผํ ๊ฒ ๊ฐ๊ณ , ์๊ฐ๋ณต์ก๋์ ๋ํด ์ข ๋ ์๊ฐํ ์ ์์๋ค.
'Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] 2563๋ฒ: ์์ข ์ด(์์ ํ์, ๊ตฌํ) (0) | 2020.03.04 |
---|---|
[๋ฐฑ์ค] 1789๋ฒ: ์๋ค์ ํฉ(๊ตฌํ) (0) | 2020.03.04 |
ํ๋ก๊ทธ๋๋จธ์ค[Java] - ์นดํซ(์์ ํ์, ์ํ) (0) | 2020.03.04 |
[๋ฐฑ์ค] 13300๋ฒ: ๋ฐฉ ๋ฐฐ์ (๊ตฌํ) (0) | 2020.03.04 |
ํ๋ก๊ทธ๋๋จธ์ค[Java] - K๋ฒ์งธ์(์ ๋ ฌ) (0) | 2020.03.04 |
๋๊ธ