티스토리 뷰

728x90
 

1️⃣ 문제

회사 식당에는 전설처럼 전해 내려오는 비밀 메뉴에 대한 소문이 있다. 소문의 내용은 대강 이러하다.

식권 자판기의 버튼을 특정 순서대로 누르고 결제를 하면, 평소와는 다른 색깔의 식권이 나온다.

 

이 식권을 배식대에 제출하면, 어떤 비밀 메뉴를 받을 수 있다는 것이다. 물론 이를 실제로 본 사람은 아무도 없어서, 어떤 메뉴가 나오는지는 커녕 눌러야 하는 버튼의 순서조차 알려져 있지 않다.

 

주방장인 당신은 이 소문의 실체를 알고 있다. 이는 분명한 사실이다!

정해진 버튼 조작법을 사용하면 비밀 메뉴의 식권을 얻을 수 있다. 그러나 얼마 전 식권 자판기가 고장으로 교체되면서, 새 자판기에서는 비밀 메뉴 조작법이 작동하지 않게 되었다.

 

당신은 프로그래밍 실력을 살려, 사용자의 버튼 조작 중 비밀 메뉴 조작법이 포함되어 있는지를 판단하는 회로를 추가하려 한다.

 

자판기에는 총 K개의 버튼이 있다. 각 버튼마다 1부터 K까지 번호가 붙어 있어서, 조작 과정은 1 이상 K 이하의 정수 여러 개로 나타낼 수 있다.

비밀 메뉴 조작법은 M개의 버튼 조작으로 이루어져 있으며, 이 순서대로 버튼을 누르면 반드시 비밀 메뉴 식권이 발매된다. 이때, 이 조작법 앞뒤로 다른 버튼 조작이 있어도 비밀 메뉴로 인정된다.

 

사용자가 누른 N개의 버튼 조작이 주어질 때, 사용자가 비밀 메뉴 식권을 받을 수 있는지를 확인하는 프로그램을 작성하여라.

[제약조건]

1 ≤ K ≤ 9

1 ≤ M ≤ 100

1 ≤ N ≤ 100

각 버튼의 번호는 1 이상 K 이하이다.

[입력형식]

첫째 줄에 M, N, K가 공백을 사이에 두고 주어진다.

둘째 줄에 비밀 메뉴 조작법을 나타내는 M개의 정수가 공백을 사이에 두고 주어진다. 각 정수는 1 이상 K 이하이다.

셋째 줄에 사용자의 버튼 조작을 나타내는 N개의 정수가 공백을 사이에 두고 주어진다. 각 정수는 1 이상 K 이하이다.

[출력형식]

사용자가 비밀 메뉴 식권을 받을 수 있다면 secret을, 그렇지 않다면 normal을 첫째 줄에 출력한다.

[입력예제1]
3 10 5
1 4 5
3 3 1 2 4 1 4 5 1 4
[출력예제1]
secret

비밀 메뉴 조작에 해당하는 부분을 표시하면 다음과 같다: 3 3 1 2 4 [1 4 5] 1 4

2️⃣ 해결방법

- 입력값들을 String으로 변환하여 비교해보자

 

3️⃣ 틀린 코드

- Arrays를 사용하여 두개의 배열이 동일한지 확인을 하려고 했는데..틀렸단다...왜 틀렸는지 모르겠다.

- 이거 함수만 잘 알면 쉽게 풀리는건데? 하고 틀렸다

- 점수 20점 맞았다..ㅎ

import java.util.*;
import java.io.*;


public class Main
{
    public static void main(String args[])
    {
       
        Scanner sc = new Scanner(System.in);
        int M = sc.nextInt();
        int N = sc.nextInt();
        int K = sc.nextInt();
        String answer = "normal";
        int[] secret = new int[M];
        int[] push = new int[N];

        for (int i=0; i<M; i++) {
            secret[i] = sc.nextInt();
        }
        for (int i=0; i<N; i++) {
            push[i] = sc.nextInt();
        }
        if (M < N) {
            for (int i=0; i<push.length; i++) {
                if (push[i] == secret[0]) {
                    int[] newArr = Arrays.copyOfRange(push,i,i+secret.length);
                    if (Arrays.equals(newArr, secret)) {
                        answer = "secret";
                        System.out.println(answer);
                        return;
                    }
                }

            }
            System.out.println(answer);
        } else {
            System.out.println(answer);
        }
    }
}

4️⃣ 정답 코드

- String의 contains 메소드를 쓰니 엄청 간단하다.

import java.util.*;
import java.io.*;


public class Main
{
    public static void main(String args[])
    {
       
        Scanner sc = new Scanner(System.in);
        int M = sc.nextInt();
        int N = sc.nextInt();
        int K = sc.nextInt();
        String answer = "normal";

        String secret = "";
        String push ="";
        for (int i=0; i<M; i++) {
            secret+= sc.nextInt();
        }
        for (int i=0; i<N; i++) {
            push += sc.nextInt();
        }
        
        if (push.contains(secret)) {
            System.out.println("secret");
        } else {
            System.out.println("normal");
        }
    }
}

'알고리즘 > 코딩테스트' 카테고리의 다른 글

[softeer/java] 8단변속기  (0) 2023.08.03
[softeer/java] 지도 자동 구축  (0) 2023.08.01
[softeer/java]회의실 잡기  (0) 2023.07.31
[softeer/java] GBC  (0) 2023.07.30
[softeer/java] 전광판  (0) 2023.07.30
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함