반응형
<문제 분석>
N마리의 앵무새가 한 문장씩 이야기 한다.
다른 앵무새가 문장을 이야기 하는 중간에 다른 앵무새가 치고 들어올 수 있다.
예제 문장이 조합이 가능하면 possible, 불가능하면 Impossible을 출력한다.
<풀이>
큐를 배열로 N개만큼 만들어서 앵무새의 문장을 단어로 잘라서 저장한다.
테스트 문장은 배열, 리스트 혹은 큐로 저장하자.
테스트 문장을 루프를 돌리면서 첫 단어를 앵무새 문장의 첫 단어에 있는지 루프를 돌리며 탐색하자.
있으면 그 단어는 삭제하고 다음으로 넘어가자. 없으면 바로 Impossible 출력한다.
테스트 문장 끝까지 무사히 탐색했으면 Possible을 출력한다.
<추가>
받아적은 문장의 단어의 수와 N개의 앵무새가 말한 단어의 수가 같아야 한다.
받아적은 문장의 단어검색이 끝났는데 앵무새의 단어가 남아있다면 Impossible을 출력하도록 하자 통과했다.
<코드 구현>
import java.util.Scanner;
import java.util.Queue;
import java.util.LinkedList;
//[백준] 14713번 - 앵무새 (Java)
public class Main {
static int N;
static Queue<String> Q[];
static Queue<String> T = new LinkedList<String>();
public void InputData() {
Scanner sc = new Scanner(System.in);
N = sc.nextInt();
Q = new LinkedList[N];
for (int i=0; i<N; i++) {
Q[i] = new LinkedList<String>();
}
sc.nextLine();
for (int i=0; i<N; i++) {
String str = sc.nextLine();
String s[] = str.split(" ");
for (int j=0; j<s.length; j++) {
Q[i].add(s[j]);
}
}
String tmp = sc.nextLine();
String t[] = tmp.split(" ");
for (int i=0; i<t.length; i++) {
T.add(t[i]);
}
}
public void Solve() {
while (!T.isEmpty()) {
String word = T.poll();
boolean found = false;
for (int i=0; i<N; i++) {
//System.out.println(word+" / "+Q[i].peek());
if (word.equals(Q[i].peek())) {
Q[i].poll();
found = true;
}
}
if (!found) { // 앵무새 한 사이클에서 찾는 단어가 없는 경우
System.out.println("Impossible");
return;
}
}
for (int i=0; i<N; i++) { // (반례) 받아적은 단어가 앵무새 단어보다 적을 경우
while(!Q[i].isEmpty()) {
System.out.println("Impossible");
return;
}
}
System.out.println("Possible");
}
public static void main(String[] args)
{
Main m = new Main();
m.InputData();///입력
//코드를 작성하세요
m.Solve();
}
}
<제출 결과>
반응형
'알고리즘 PS > 백준 알고리즘' 카테고리의 다른 글
[백준] 2665번 - 미로만들기 (Java) (0) | 2022.10.27 |
---|---|
[백준] 2293번 - 동전 1 (Java) (2) | 2022.10.14 |
[백준] 2304번 - 창고 다각형 (Java) (1) | 2022.10.11 |
[백준] 1926번 - 그림 (Java) (0) | 2022.10.10 |
[백준] 14496번 - 그대, 그머가 되어 (Java) (0) | 2022.10.08 |
댓글