문제 요약
회사 식당에는 전설처럼 전해 내려오는 비밀 메뉴에 대한 소문이 있다. 소문의 내용은 대강 이러하다.
식권 자판기의 버튼을 특정 순서대로 누르고 결제를 하면, 평소와는 다른 색깔의 식권이 나온다.
이 식권을 배식대에 제출하면, 어떤 비밀 메뉴를 받을 수 있다는 것이다. 물론 이를 실제로 본 사람은 아무도 없어서, 어떤 메뉴가 나오는지는커녕 눌러야 하는 버튼의 순서조차 알려져 있지 않다.
주방장인 당신은 이 소문의 실체를 알고 있다. 이는 분명한 사실이다!
정해진 버튼 조작법을 사용하면 비밀 메뉴의 식권을 얻을 수 있다. 그러나 얼마 전 식권 자판기가 고장으로 교체되면서, 새 자판기에서는 비밀 메뉴 조작법이 작동하지 않게 되었다.
당신은 프로그래밍 실력을 살려, 사용자의 버튼 조작 중 비밀 메뉴 조작법이 포함되어 있는지를 판단하는 회로를 추가하려 한다.
자판기에는 총 K개의 버튼이 있다. 각 버튼마다 1부터 K까지 번호가 붙어 있어서, 조작 과정은 1 이상 K 이하의 정수 여러 개로 나타낼 수 있다.
비밀 메뉴 조작법은 M개의 버튼 조작으로 이루어져 있으며, 이 순서대로 버튼을 누르면 반드시 비밀 메뉴 식권이 발매된다. 이때, 이 조작법 앞뒤로 다른 버튼 조작이 있어도 비밀 메뉴로 인정된다.
사용자가 누른 N개의 버튼 조작이 주어질 때, 사용자가 비밀 메뉴 식권을 받을 수 있는지를 확인하는 프로그램을 작성하여라.
문제 분석
그냥 문자열 메서드를 사용하면 풀릴 거 같다.
코드
import java.util.*;
import java.io.*;
public class Main
{
public static void main(String args[]) throws IOException
{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int M = Integer.parseInt(st.nextToken());
int N = Integer.parseInt(st.nextToken());
int K = Integer.parseInt(st.nextToken());
String secret = "";
st = new StringTokenizer(br.readLine());
while(st.hasMoreTokens()){
secret+=st.nextToken();
}
String menu = "";
st = new StringTokenizer(br.readLine());
while(st.hasMoreTokens()){
menu+=st.nextToken();
}
System.out.println(menu.contains(secret)?"secret":"normal");
}
}
정리
새로 배운 내용
없음
개선할 점
StringBuilder나 StringBuffer를 좀 사용해보고 싶다.
더 찾아볼만한 사항
정규식을 사용해 볼 수도 있을 것 같다.
'알고리즘 풀이 > 소프티어' 카테고리의 다른 글
[level 2] [21년 재직자 대회 예선] 회의실 예약 (JAVA) (0) | 2023.05.10 |
---|---|
[level 2] [21년 재직자 대회 예선] 전광판 (JAVA) (0) | 2023.05.10 |
[level 2] 지도 자동 구축 (JAVA) (0) | 2023.05.10 |
[level 2] 장애물 인식 프로그램 (JAVA) (0) | 2023.05.10 |
[level 2] 8단 변속기(JAVA) (0) | 2023.05.10 |