백준 1384번 메시지 (Java, Kotlin)

: ) YOUNG·2022년 6월 28일
1

알고리즘

목록 보기
151/417
post-thumbnail

백준 1384번
https://www.acmicpc.net/problem/1384

문제



입력은 번호를 가진 그룹들로 이루어져 있습니다. 그룹의 번호는 1부터 시작하며 1씩 증가합니다. 각 그룹의 입력은 참여한 아이들의 수 n(5 ≤ n ≤ 20)이 한 줄에 주어지면서 시작됩니다. 다음 n 줄에 걸쳐 위 활동을 끝마친 종이 n장이 입력됩니다. n 줄의 순서는 아이들이 앉아있고 종이를 넘기던 순서와 같습니다. 예를 들어 첫 번째 줄에 해당하는 아이는 두 번째 줄에 해당하는 아이에게 종이를 넘겼고, 마지막 줄에 해당하는 아이는 첫 번째 줄에 해당하는 아이에게 종이를 넘겼습니다.

각 줄은 종이 맨 위의 이름으로 시작합니다. 다음으로 공백을 사이에 두고 종이에 적힌 메시지가 종이 위에서부터 아래로 순서대로 쓰입니다. 문제를 간단하게 하기 위해 좋은 메시지는 'P'로, 나쁜 메시지는 'N'으로 표기합니다. 이름은 60글자 이하의 알파벳 소문자 또는 대문자로 이루어져 있습니다.

마지막 줄에 '0'이 입력되면서 입력이 종료됩니다. '0'은 처리하지 않습니다.


생각하기


  • 전체 내용을 2차원 배열로 만들자
  • 음수가 나오는 값을 처리하자

동작

			for(int i=0; i<N; i++) {
				StringTokenizer st = new StringTokenizer(br.readLine());
				for(int j=0; j<N; j++) {
					arr[i][j] = st.nextToken();
				}
			}

우선 전체 종이를 모두 받은 결과물을 2차원 배열로 만든다.



			int num = 0;
			boolean bol = true;
			for(int i=0; i<N; i++) {
				for(int j=0; j<N; j++) {
					if(arr[i][j].equals("N")) {
						num = i - j;
						if(num < 0) num += N; 
						
						sb.append(arr[num][0]).append(" was nasty about ").append(arr[i][0]).append('\n');
						bol = false;
					}
				}
			}
			if(bol == true) sb.append("Nobody was nasty").append('\n');

2차원 배열을 기준으로 누가 "N"을 적었는지 알 수 있다.

i - j의 값이 음수일경우, 전체 N을 빼주면 누구인지 알아낼 수 있다.



코드



Java

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

public class Main {
	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
		StringBuilder sb = new StringBuilder(); 
		
		int N = Integer.parseInt(br.readLine());
		int group = 1;
		while( N != 0 ) {
			sb.append("Group").append(' ').append(group).append('\n');
			String arr[][] = new String[N][N];
			
			for(int i=0; i<N; i++) {
				StringTokenizer st = new StringTokenizer(br.readLine());
				for(int j=0; j<N; j++) {
					arr[i][j] = st.nextToken();
				}
			}
			
			int num = 0;
			boolean bol = true;
			for(int i=0; i<N; i++) {
				for(int j=0; j<N; j++) {
					if(arr[i][j].equals("N")) {
						num = i - j;
						if(num < 0) num += N; 
						
						sb.append(arr[num][0]).append(" was nasty about ").append(arr[i][0]).append('\n');
						bol = false;
					}
				}
			}
			if(bol == true) sb.append("Nobody was nasty").append('\n');

			group ++;
			sb.append('\n');
			N = Integer.parseInt(br.readLine());
		}
		
		bw.write(sb.toString()); bw.flush(); bw.close();
	} // End of main
} // End of Main class

Kotlin

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

fun main() {
    val br = BufferedReader(InputStreamReader(System.`in`))
    val bw = BufferedWriter(OutputStreamWriter(System.`out`))
    val sb = StringBuilder()
    var N = br.readLine().toInt()

    var GroupNum = 1
    while( N != 0 ) {
        sb.append("Group ${GroupNum}").append('\n')
        val arr = Array(N, {Array<String>(N+1) {""}})

        for(i in 0 until N) {
            var st = StringTokenizer(br.readLine())
            for(j in 0 until N) {
                arr[i][j] = st.nextToken()
            }
        }

        var num = 0
        var bol = true;
        for(i in 0 until N) {
            for(j in 0 until N) {
                if(arr[i][j].equals("N")) {
                    num = i - j
                    if(num < 0) {
                        num += N
                    }

                    sb.append(arr[num][0]).append(" was nasty about ").append(arr[i][0]).append('\n')
                    bol = false;
                }
            }
        }

        if(bol == true) sb.append("Nobody was nasty").append('\n')

        GroupNum++
        N = br.readLine().toInt()
        sb.append('\n')
    }
    bw.write(sb.toString());bw.flush();bw.close()
} // End of main

0개의 댓글