알고리즘/Softeer

[Softeer][level2][21년 재직자 대회 예선] 비밀 메뉴 - 파이썬(Python)

Kangjieun11 2023. 1. 30. 00:35
728x90

https://softeer.ai/practice/info.do?idx=1&eid=623 

 

Softeer

연습문제를 담을 Set을 선택해주세요. 취소 확인

softeer.ai

 

문제

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

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

 

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

 

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

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

 

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

 

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

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

 

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

 

 

 


 
 


 

 

하 너무 어렵게 생각했다가 빵점 맞았다 ㅋㅋㅋㅋㅋㅋㅋㅋ

소프티어의 채점기준을 이 문제를 통해 조금이나마 엿본 느낌...


🥲 빵점 맞은 코드... 

빵점 맞을정도로 못 풀지 않았는데 화가난다.

같은 레벨2 문제들에서 생각 이상으로 처리해줘야하는 문제들이 존재해서 너무 어렵게 생각했나보다 ㅠㅠㅠㅠㅠㅠ

import sys
input = sys.stdin.readline 

m,n,k = map(int,input().split())

if m > n :
    print("normal")
    exit()

secret_key = list(map(int,input().split()))
user_input = list(map(int,input().split()))

u = 0
while u != n:
    test_u = u
    if secret_key[0] == user_input[test_u]:
        #for문 으로 s, test_u 증가시켜가면서 값 비교 
        test_u += 1
        count = 1
        for test_s in range(1, m):
            if(secret_key[test_s] == user_input[test_u]):
                test_u+= 1
                count+=1
                if(count == m):
                    print("secret")
                    exit()
            else:
                u+=1
                break

        
    else :
        u+=1
    
print("normal")

 

 

 

 

쉽게 생각하자 최대한...  쉽게 생각하는걸 연습하자...

💻 다른 사람의 코드를 참고 후  [작성한 정답코드]

import sys
input = sys.stdin.readline 

m,n,k = map(int,input().split())

if m > n :
    print("normal")
    exit()

secret_key = "".join(list(map(str,input().split())))
user_input = "".join(list(map(str,input().split())))

if secret_key in user_input:
    print("secret")
else:
    print("normal")

 

 

* join함수 : 리스트의 문자열들을 합치는 역할이라는걸 기억하자!!

https://devpouch.tistory.com/77

 

[python] 파이썬 문자열 합치기 나누기 split/join 함수

문자열 나누기- split() 함수 파이썬에서 문자열을 쪼개는 함수는 split()함수입니다. 이 함수는 파라미터로 구분자를 주면 해당 구분자를 기준으로 문자열을 잘라 리스트 형식으로 반환합니다. 만

devpouch.tistory.com