티스토리 뷰
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 4 5
3 3 1 2 4 1 4 5 1 4
비밀 메뉴 조작에 해당하는 부분을 표시하면 다음과 같다: 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
- centos
- javascript
- softeer
- 오토에버코테
- softeer java
- 리액트
- 코테
- 자바스크립트
- 자바코테
- 도커
- java 코테
- 코딩테스트
- 전자정부프레임워크
- 톰캣
- 현대
- Docker
- 자바
- Linux
- java
- 현대코테
- Kubernetes
- mysql
- 스프링
- springboot
- Spring
- tomcat
- 아파치카프카
- 현대오토에버
- 쿠버네티스
- react
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |