본문 바로가기

알고리즘/🥈 실버

백준 1384 메시지 자바 풀이

728x90

난이도 : 실버5

풀이일 : 12155

https://www.acmicpc.net/problem/1384

 

1384번: 메시지

그룹 번호를 "Group 1"과 같이 출력함으로써 출력을 시작합니다. 그 다음 줄부터 누가(A) 누구(B)에게 나쁜 말을 했는지 "A was nasty about B"로 한 줄씩 출력합니다. 나쁜 말이 여러 개라면, 입력받은 순

www.acmicpc.net


링크로 이동하기 귀찮은 분들을 위한 문제 캡쳐


풀이 코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main {
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		int group = 1;
		
		while (true) {
			int N = Integer.parseInt(br.readLine());
			boolean flag = true;
			
			if (N == 0) break;
			
			// 정보 입력 받기
			String[][] array = new String[N][N];
			
			for (int i = 0; i < N; i++) {
				StringTokenizer st = new StringTokenizer(br.readLine());
				for (int j = 0; j < N; j++) {
					array[i][j] = st.nextToken();
				}
			}
			
			System.out.println("Group " + group);
			
			// 나쁜말 검사 및 출력
			for (int i = 0; i < N; i++) {
				for (int j = 0; j < N; j++) {
					if (array[i][j].equals("N")) {
						if (i < j) {
							System.out.println(array[N - j + i][0] + " was nasty about " + array[i][0]);
						}
						else {
							System.out.println(array[i - j][0] + " was nasty about " + array[i][0]);
						}
						flag = false;
					}
				}
			}
			
			if (flag) System.out.println("Nobody was nasty");
			System.out.println();
			group += 1;
		}
	}
}
  • 배운 것
    • StringTokenizer는 입력 받은 한 줄에 대해서만 동작 : 왜 에러가 나는지 헤맸었는데, 반복문 안에서 쓰는 방향으로 활용해야겠다.
    • array[i][j].equals() : == 으로 비교하다가 알게되었는데, 문자열은 참조형 타입이기 때문에 equals()로 문자열이 같은지 비교 할 수 있다. (숫자의 경우 == 사용 가능)
  • 풀이
    • 입력으로 주어진 값들을 array에 저장
    • 입력 받은 값들을 순회하며 나쁜말 N을 찾으면 누가 누구에게 했는지 인덱스를 활용해 출력
    • 아무도 나쁜말을 하지 않아 flag가 ture라면, 문제 조건 문장 출력

느낀점

  • 자바로 이차원 배열 문제는 처음 풀어본 것 같다. 익숙해져서 얼른 배열 문제들 풀어야지.
  • 까다로운 문제는 아니었는데 생각보다 오래 걸려 풀어낸 것 같다.