반응형
12-24 00:25
- Today
- Total
Link
개발하는 고라니
[백준] 5884번 : 감시 카메라 본문
반응형
[Map 이용]
Java의 Map 컬렉션을 사용했다. 문제의 접근법은 간단하며 다음과 같다.
- 2차원 배열에 소들의 (x, y) 좌표를 저장한다.
- x좌표 Map과 y좌표 Map을 준비한다.
- x좌표 Map에 Key로 좌표를, Value로 빈도수를 저장한다. y좌표 Map에도 마찬가지
- 감시 카메라는 총 3대이므로 3번의 반복문을 수행한다
- xMap에서의 가장 많이 위치한 x좌표의 정보를 꺼낸다.
- yMap에서의 가장 많이 위치한 y좌표의 정부를 꺼낸다.
- (1), (2)를 비교해 더 큰 값을 저장하고, 해당 Map에서 값을 지운다. (yMap의 최대값이 더 크면 yMap의 최대값을 지운다.)
- 소들의 좌표를 저장한 배열을 순회하며 감시 카메라 3대로 감시할 수 있는지 체크한다.
문제의 접근법은 쉽다고 생각되지만, 이를 구현하는 것에 있어 애를 먹었다. Map을 자주 사용하지 않았던 탓에 처음 보는 개념이나 용어도 있었다.
우선 Map에서 최대값을 뽑는 방법이다.
Map.Entry<Integer, Integer> xMaxEntry = null;
for (Map.Entry<Integer, Integer> entry : xmap.entrySet())
if (xMaxEntry == null || entry.getValue().compareTo(xMaxEntry.getValue()) > 0)
xMaxEntry = entry;
int maxKey = xMaxEntry.getKey();
int maxVal = xMaxEntry.getKey();
다음은 빈도수를 1씩 증가시키는 방법이다.
for(int i=0; i<n; i++){
StringTokenizer st = new StringTokenizer(br.readLine());
int x = Integer.parseInt(st.nextToken());
int y = Integer.parseInt(st.nextToken());
if(!xmap.containsKey(x))
xmap.put(x, 1);
else
xmap.replace(x, xmap.get(x) + 1);
if(!ymap.containsKey(y))
ymap.put(y, 1);
else
ymap.replace(y, ymap.get(y) + 1);
}
# Code </>
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.Map;
import java.util.StringTokenizer;
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());
Map<Integer, Integer> xmap = new HashMap<>();
Map<Integer, Integer> ymap = new HashMap<>();
int[][] cows = new int[n][2];
for(int i=0; i<n; i++){
StringTokenizer st = new StringTokenizer(br.readLine());
int x = Integer.parseInt(st.nextToken());
int y = Integer.parseInt(st.nextToken());
cows[i][0] = x;
cows[i][1] = y;
if(!xmap.containsKey(x))
xmap.put(x, 1);
else
xmap.replace(x, xmap.get(x) + 1);
if(!ymap.containsKey(y))
ymap.put(y, 1);
else
ymap.replace(y, ymap.get(y) + 1);
}
int[][] arr = new int[3][2];
for(int i=0; i<3; i++) {
Map.Entry<Integer, Integer> xMaxEntry = null;
Map.Entry<Integer, Integer> yMaxEntry = null;
for (Map.Entry<Integer, Integer> entry : xmap.entrySet())
if (xMaxEntry == null || entry.getValue().compareTo(xMaxEntry.getValue()) > 0)
xMaxEntry = entry;
for (Map.Entry<Integer, Integer> entry : ymap.entrySet())
if (yMaxEntry == null || entry.getValue().compareTo(yMaxEntry.getValue()) > 0)
yMaxEntry = entry;
if(xMaxEntry.getValue() >= yMaxEntry.getValue()){
arr[i][0] = 0;
arr[i][1] = xMaxEntry.getKey();
xmap.remove(arr[i][1], xMaxEntry.getValue());
}
else{
arr[i][0] = 1;
arr[i][1] = yMaxEntry.getKey();
ymap.remove(arr[i][1], yMaxEntry.getValue());
}
}
boolean result = true;
for(int i=0; i<n; i++)
if(cows[i][ arr[0][0] ] != arr[0][1] && cows[i][ arr[1][0] ] != arr[1][1] && cows[i][ arr[2][0] ] != arr[2][1]){
result = false;
break;
}
System.out.println(result? 1 : 0);
}
}
반응형
'Programming > 백준' 카테고리의 다른 글
[백준] 3709번 : 레이저빔은 어디로 (0) | 2021.05.13 |
---|---|
[백준] 5430번 : AC (0) | 2021.05.12 |
[백준] 16441번 : 아기돼지와 늑대 (0) | 2021.05.10 |
[백준] 1034번 : 램프 (0) | 2021.05.10 |
[백준] 9655번 : 돌 게임 (0) | 2021.05.10 |
Comments