[Algorithm] ๐Ÿ–๏ธ๋ฐฑ์ค€ 2358 ํ‰ํ–‰์„ 

HaJingJingยท2021๋…„ 5์›” 30์ผ
0

Algorithm

๋ชฉ๋ก ๋ณด๊ธฐ
56/119

0. ๋ฌธ์ œ

ํ‰๋ฉด์ƒ์— n๊ฐœ์˜ ์ ์ด ์žˆ๋‹ค. ์ด ์ ๋“ค ์ค‘์— ์„œ๋กœ ๋‹ค๋ฅธ ๋‘ ์ ์„ ์„ ํƒํ•˜๋ฉด ํ•˜๋‚˜์˜ ์ง์„ ์ด ๋งŒ๋“ค์–ด์ง„๋‹ค. ์ด์™€ ๊ฐ™์ด ์ง์„ ์„ ๋งŒ๋“ค์—ˆ์„ ๋•Œ, x์ถ• ๋˜๋Š” y์ถ•์— ํ‰ํ–‰ํ•œ ์ง์„ ์ด ๋ช‡ ๊ฐœ๋‚˜ ๋˜๋Š”์ง€ ์•Œ์•„๋‚ด๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

์ž…๋ ฅ
์ฒซ์งธ ์ค„์— n(1โ‰คnโ‰ค100,000)์ด ์ฃผ์–ด์ง„๋‹ค. ๋‹ค์Œ n๊ฐœ์˜ ์ค„์—๋Š” ๊ฐ ์ ์˜ ์ขŒํ‘œ๊ฐ€ int ๋ฒ”์œ„์—์„œ ์ฃผ์–ด์ง„๋‹ค. ๋งŒ์•ฝ ์ž…๋ ฅ์— ์„œ๋กœ ๊ฐ™์€ ๋‘ ์ ์ด ์ฃผ์–ด์ง€๋ฉด, ๊ทธ ๋‘ ์ ์„ ์ด์šฉํ•˜์—ฌ ์ง์„ ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.

์ถœ๋ ฅ
์ฒซ์งธ ์ค„์— ๋‹ต์„ ์ถœ๋ ฅํ•œ๋‹ค.

1. ์•„์ด๋””์–ด

HashMap ์ด์šฉ
๐Ÿ’ก x๋ฅผ key, y๋ฅผ value๋กœ ํ•˜๋Š” hashmap ์ƒ์„ฑ
๐Ÿ’ก y๋ฅผ key, x๋ฅผ value๋กœ ํ•˜๋Š” hashmap ์ƒ์„ฑ
๐Ÿ’ก x๊ฐ’์ด ๊ฐ™์œผ๋ฉด y์ถ•์— ํ‰ํ–‰, y๊ฐ’์ด ๊ฐ™์œผ๋ฉด x์ถ•์— ํ‰ํ–‰ํ•จ
โ†’ ๊ฐ™์€ key๊ฐ’์„ ๊ฐ€์ง„ value๋“ค์ด 2๊ฐœ ์ด์ƒ ์กด์žฌํ•˜๋ฉด, ํ‰ํ–‰ํ•œ ์ง์„  ํ•˜๋‚˜๊ฐ€ ์ƒ์„ฑ๋จ

2. ํ•ต์‹ฌ ํ’€์ด

1) x๋ฅผ key, y๋ฅผ value๋กœ ํ•˜๋Š” hashmap ์ƒ์„ฑ

HashMap<Integer, ArrayList<Integer>> xMap = new HashMap<>();
...
ArrayList<Integer> ylist = new ArrayList<>();
...
if(xMap.containsKey(x)) {
	ylist = xMap.get(x);
}
ylist.add(y);
xMap.put(x, ylist);

2) y๋ฅผ key, x๋ฅผ value๋กœ ํ•˜๋Š” hashmap ์ƒ์„ฑ

HashMap<Integer, ArrayList<Integer>> yMap = new HashMap<>();
...
ArrayList<Integer> xlist = new ArrayList<>();
...
if(yMap.containsKey(y)) {
	xlist = yMap.get(y);
}
xlist.add(x);
yMap.put(y, xlist);

3) ๊ฐ™์€ key๊ฐ’์„ ๊ฐ€์ง„ value๋“ค์ด 2๊ฐœ ์ด์ƒ ์กด์žฌํ•˜๋ฉด, ํ‰ํ–‰ํ•œ ์ง์„  ํ•˜๋‚˜๊ฐ€ ์ƒ์„ฑ๋จ

int count = 0;
for(int key : xMap.keySet()) {
	if(xMap.get(key).size() >= 2)
		count++;
}
		
for(int key : yMap.keySet()) {
	if(yMap.get(key).size() >= 2)
		count++;
}

3. ์ฝ”๋“œ

import java.util.HashMap;
import java.util.ArrayList;
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class Hash_1 {

	public static void main(String[] args) throws Exception{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		int n = Integer.parseInt(br.readLine());
		
		HashMap<Integer, ArrayList<Integer>> xMap = new HashMap<>();
		HashMap<Integer, ArrayList<Integer>> yMap = new HashMap<>();
		
		for(int i=0; i<n; i++) {
			String[] s = br.readLine().split(" ");
			int x = Integer.parseInt(s[0]);
			int y = Integer.parseInt(s[1]);
			
			ArrayList<Integer> ylist = new ArrayList<>();
			ArrayList<Integer> xlist = new ArrayList<>();
			
			if(xMap.containsKey(x)) {
				ylist = xMap.get(x);
			}
			ylist.add(y);
			xMap.put(x, ylist);
			
			if(yMap.containsKey(y)) {
				xlist = yMap.get(y);
			}
			xlist.add(x);
			yMap.put(y, xlist);
		}
		
		int count = 0;
		for(int key : xMap.keySet()) {
			if(xMap.get(key).size() >= 2)
				count++;
		}
		
		for(int key : yMap.keySet()) {
			if(yMap.get(key).size() >= 2)
				count++;
		}
		
		System.out.println(count);
	}

}

4. ๊ฒฐ๊ณผ

์„ฑ๊ณตโœจ

profile
๐ŸŒฑ์ดˆ๋ณด ๊ฐœ๋ฐœ์ž๐ŸŒฑ

0๊ฐœ์˜ ๋Œ“๊ธ€