알고리즘

[백준, 자바, 1384번] 메시지

hminor 2024. 2. 13. 13:12

풀이

  • name과 check 2차원 배열을 만들어 둔 다음
  • 반복문을 통해 받아오는 입력 값 중
  • 첫 값은 name, 이 후의 값을 확인하여 인덱스 값을 추가한 다음
  • 다시 반복문을 순회하며 check에 추가된 인덱스 값에 맞게 
  • 출력문을 출력하며
  • state에 따른 출력문 또한 함께 출력
  • 예시에선 N으로 된 나쁜 말을 작성하는 친구가 한 명 뿐이지만 
  • 숨어있는 입력값으로는 더 많을 것으로 예상되어 아래와 같이 코드를 작성하여 해결

 

import java.io.*;
import java.util.*;

public class 메시지 {
    public static void main(String[] args) throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int tc = 1;

        while (true) {
            int n = Integer.parseInt(br.readLine());
            if (n == 0) break;

            boolean state = true;
            ArrayList<String> name = new ArrayList<>(Collections.nCopies(n,""));
            Integer[][] check = new Integer[n][];
            for (int i = 0; i < n; i++) {
                check[i] = new Integer[n-1];
                check[i][0] = 0;
            }

            for (int i = 0; i < n; i++) {
                StringTokenizer st = new StringTokenizer(br.readLine());
                name.set(i,st.nextToken());
                int cnt = 0;
                for (int j = 1; j < n; j++) {
                    if (st.nextToken().equals("N")) {
                        check[i][cnt] = j;
                        cnt++;
                        if (state) state = false;
                    }
                }
            }
            System.out.println("Group " + tc);

            for (int i = 0; i < n; i++) {
                if (check[i][0] != 0) {
                    for (Integer j: check[i]) {
                        String devil = "";
                        if (j == null) break;
                        if (i-j >= 0) devil = name.get(i-j);
                        else devil = name.get(n+i-j);
                        System.out.println(devil + " was nasty about " + name.get(i));
                    }
                }
            }

            if (state) System.out.println("Nobody was nasty");
            System.out.println();
            tc++;
        }
    }
}