728x90
난이도 : 실버5
풀이일 : 12155
https://www.acmicpc.net/problem/1384
링크로 이동하기 귀찮은 분들을 위한 문제 캡쳐
풀이 코드
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라면, 문제 조건 문장 출력
느낀점
- 자바로 이차원 배열 문제는 처음 풀어본 것 같다. 익숙해져서 얼른 배열 문제들 풀어야지.
- 까다로운 문제는 아니었는데 생각보다 오래 걸려 풀어낸 것 같다.
'알고리즘 > 🥈 실버' 카테고리의 다른 글
백준 1769 3의 배수 자바 풀이 (0) | 2024.01.04 |
---|---|
백준 1926 그림 자바 풀이 (0) | 2023.12.17 |
백준 26169 세 번 이내에 사과를 먹자 파이썬 풀이 (0) | 2023.11.22 |
백준 11659 구간 합 구하기 4 자바 풀이 (0) | 2023.08.20 |
백준 1138 한 줄로 서기 자바 풀이 (0) | 2023.07.26 |