[ ๋ฐฑ์ค / BOJ 20551 ] Sort ๋ง์คํฐ ๋ฐฐ์งํ์ ํ๊ณ์ ( JAVA / ์๋ฐ )
https://www.acmicpc.net/problem/20551
20551๋ฒ: Sort ๋ง์คํฐ ๋ฐฐ์งํ์ ํ๊ณ์
์งํ์ด๋ Sort ๋ง์คํฐ๋ค. ์ค๋ซ๋์ Sort ๋ง์คํฐ ์๋ฆฌ๋ฅผ ์ง์ผ์จ ์งํ์ด๋ ์ด์ ๋ง์คํฐ ์๋ฆฌ๋ฅผ ํ๊ณ์์๊ฒ ๋ฌผ๋ ค์ฃผ๋ ค๊ณ ํ๋ค. ์๋ง์ ์ ์๋ค ์ค์ ํ๊ณ์๋ฅผ ๊ณ ๋ฅด๊ธฐ ์ํด์ ์งํ์ด๋ ์ ์๋ค์๊ฒ ๋ฌธ์
www.acmicpc.net
๋ฌธ์
์งํ์ด๋ Sort ๋ง์คํฐ๋ค. ์ค๋ซ๋์ Sort ๋ง์คํฐ ์๋ฆฌ๋ฅผ ์ง์ผ์จ ์งํ์ด๋ ์ด์ ๋ง์คํฐ ์๋ฆฌ๋ฅผ ํ๊ณ์์๊ฒ ๋ฌผ๋ ค์ฃผ๋ ค๊ณ ํ๋ค. ์๋ง์ ์ ์๋ค ์ค์ ํ๊ณ์๋ฅผ ๊ณ ๋ฅด๊ธฐ ์ํด์ ์งํ์ด๋ ์ ์๋ค์๊ฒ ๋ฌธ์ ๋ฅผ ์ค๋นํ๋ค. ๋จผ์ ์ ์๋ค์๊ฒ N๊ฐ์ ์์๋ฅผ ๊ฐ์ง ๋ฐฐ์ดA๋ฅผ ์ฃผ๊ณ , A์ ์์๋ค์ด ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌ๋ ๋ฐฐ์ดB๋ฅผ ๋ง๋ค๊ฒ ํ๋ค. ๊ทธ๋ค์ M๊ฐ์ ์ง๋ฌธ์ ํ๋ค. ๊ฐ ์ง๋ฌธ์๋ ์ ์ D๊ฐ ์ฃผ์ด์ง๋ค. ์ ์๋ค์ ์ฃผ์ด์ง ์ ์D๊ฐ B์์ ๊ฐ์ฅ ๋จผ์ ๋ฑ์ฅํ ์์น๋ฅผ ์ถ๋ ฅํ๋ฉด ๋๋ค. ๋จ, D๊ฐ B์ ์กด์ฌํ์ง ์๋ ๊ฒฝ์ฐ์๋ -1๋ฅผ ์ถ๋ ฅํ๋ค. Sort ๋ง์คํฐ์ ์๋ฆฌ๋ฅผ ๋๋ฌด๋๋ ๋ฌผ๋ ค๋ฐ๊ณ ์ถ์ ์ฐฝ๊ตญ์ด๋ฅผ ์ํด ์งํ์ด์ ๋ฌธ์ ๋ฅผ ํ ์ ์๋ ํ๋ก๊ทธ๋จ์ ๋ง๋ค์ด ์ฃผ์.
์ ๋ ฅ
์ฒซ์งธ ์ค์ ๋ฐฐ์ดA์ ์์์ ๊ฐ์ N๊ณผ ์ง๋ฌธ์ ๊ฐ์ M์ด ๊ณต๋ฐฑ์ผ๋ก ๊ตฌ๋ถ๋์ด ์ฃผ์ด์ง๋ค.
๋ค์ ์ค๋ถํฐ N์ค์ ๊ฑธ์ณ ์ ์ ์ด ์ฃผ์ด์ง๋ค.
๋ค์ ์ค๋ถํฐ M์ค์ ๊ฑธ์ณ ์ ์ D๊ฐ ์ฃผ์ด์ง๋ค.
์ถ๋ ฅ
โ๊ฐ์ ์ง๋ฌธ์ ๋ํด์ ์ฃผ์ด์ง ๊ฐ ์์ ์ฒ์์ผ๋ก ๋ฑ์ฅํ ์์น๋ฅผ ์ถ๋ ฅํ๋ค. ๋จ, ์กด์ฌํ์ง ์๋๋ค๋ฉด -1๋ฅผ ์ถ๋ ฅํ๋ค. (๋ฐฐ์ด์์ ๊ฐ์ฅ ์์ ์์์ ์์น๋ 0์ด๋ค.)
ํ์ด
์ฒ์์๋ Collections.sort()์ LinkedList.indexOf() ๋ฅผ ์ฌ์ฉํด์ ์ฝ๊ฒ ํด๊ฒฐ์ด ๊ฐ๋ฅํ ๊ฒ์ด๋ผ๊ณ ์๊ฐ โผ๏ธ
๊ทธ๋ฌ๋ ๊ทธ๊ฒ์ ๋์ ์คํ๐คฆโ๏ธ
Arrays.sort() ํ, HashMap์ ๊ฐ๊ณผ ์ฒ์ ๋ํ๋ ์ธ๋ฑ์ค๋ฅผ ์ ์ฅํด์ ์ถ๋ ฅํด์ฃผ์๋๋ ํต๊ณผ โผ๏ธ
์ฝ๋
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedList;
import java.util.Map;
import java.util.Set;
import java.util.StringTokenizer;
public class Main_BOJ_20551_Sort๋ง์คํฐ๋ฐฐ์งํ์ํ๊ณ์ {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
StringTokenizer stringTokenizer = new StringTokenizer(br.readLine());
int N = Integer.parseInt(stringTokenizer.nextToken());
int M = Integer.parseInt(stringTokenizer.nextToken());
// ์๊ฐ์ด๊ณผ
/* LinkedList<Integer> arrA = new LinkedList<>();
for(int i = 0 ; i < N ; i++){
arrA.add(Integer.parseInt(br.readLine()));
}
Collections.sort(arrA);
while(M-- > 0){
int x = Integer.parseInt(br.readLine());
sb.append(arrA.indexOf(x)).append("\n");
}
System.out.println(sb); */
int[] arrA = new int[N];
for(int i = 0 ; i < N ; i++){
arrA[i] = Integer.parseInt(br.readLine());
}
Arrays.sort(arrA);
Map<Integer, Integer> map = new HashMap<>();
for(int i = 0 ; i < N ; i++){
if(!map.containsKey(arrA[i])){
map.put(arrA[i], i);
}
}
while(M-- > 0){
int x = Integer.parseInt(br.readLine());
if(map.containsKey(x))
sb.append(map.get(x)).append("\n");
else
sb.append(-1).append("\n");
}
System.out.println(sb);
}
}