CS/알고리즘_문제풀이(자바)

상자 꾸미기

Jedy_Kim 2021. 8. 27. 13:23
728x90

문제

면이 6개인 상자가 있다. 이를 여러 가지 색종이를 붙여 꾸밀려고 하는데, 단 조건이 있다. 인접한 면에 같은 색의 색종이를 붙이면 안 된다는 것이다. 또한, 한 면에는 한 장의 색종이만 붙일 수 있다. 여러 가지 색의 색종이들이 주어졌을 때, 조건을 만족하여 상자의 모든 면에 붙일 수 있는지 판별하는 프로그램을 작성하시오.

 

입력

첫째 줄에 색종이의 장수 N ( 1 <= N <= 1,000 ) 이 주어진다. 둘째 줄에 각각의 색종이의 색깔을 나타내는 N개의 숫자가 주어진다. 색깔은 양의 정수로 이루어져 있고, 1부터 N까지의 범위의 수이다.

 

출력

조건을 만족하면서 상자를 꾸밀 수 있으면 “YES”, 아니면 “NO”를 출력한다.

 

예제 입력

6
1 2 1 2 1 3

예제 출력

NO

 

예제 입력

6
1 2 3 1 2 3

예제 출력

YES

 

예제 입력

7
1 1 1 2 2 3 3

예제 출력

YES

 

예제 입력

8
1 2 2 2 1 1 1 3

예제 출력

NO

 

#코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
import java.util.*;
import java.util.Map.*;
import java.io.*;
 
public class Main{
    public static void main(String[] args)  throws Exception{
 
      // Please Enter Your Code Here
      BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
      StringTokenizer st = new StringTokenizer(br.readLine());
      Map<Integer, Integer> myMap = new HashMap<>();
      
      int N = Integer.parseInt(st.nextToken());
      st = new StringTokenizer(br.readLine());
      
      for(int i = 0; i < N; i++) {
        int tempVal = Integer.parseInt(st.nextToken());
        if(myMap.containsKey(tempVal)) {
          int cnt = (int)myMap.get(tempVal);
          if(cnt < 2)
            myMap.put(tempVal, cnt+1);
        } else {
          myMap.put(tempVal, 1);
        }
      }
      
      int resVal = 0;
      for(Entry<Integer, Integer> entrySet : myMap.entrySet()) {
        resVal += (int)entrySet.getValue();
      }
      
      if(resVal >= 6) {
        System.out.println("YES");  
      } else {
        System.out.println("NO");  
      }
      
    }
}
cs

 

반응형

'CS > 알고리즘_문제풀이(자바)' 카테고리의 다른 글

GCD LCM  (0) 2021.08.28
colorpaper  (0) 2021.08.27
offset  (0) 2021.08.27
eightnine  (0) 2021.08.27
검증수  (0) 2021.08.27