풀이
- 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++;
}
}
}
'알고리즘' 카테고리의 다른 글
[백준, 파이썬, 1835번] 카드 (0) | 2024.02.14 |
---|---|
[백준, 파이썬, 4583번] 거울상 (1) | 2024.02.14 |
[백준, 파이썬, 1384번] 메시지 (1) | 2024.02.13 |
[백준, 자바, 1380번] 귀걸이 (0) | 2024.02.13 |
[백준, 파이썬, 1380번] 귀걸이 (0) | 2024.02.13 |