관리 메뉴

솜씨좋은장씨

[BaekJoon] 2776번 : 암기왕 (Python) 본문

Programming/코딩 1일 1문제

[BaekJoon] 2776번 : 암기왕 (Python)

솜씨좋은장씨 2021. 9. 4. 09:03
728x90
반응형

간만에 주말인데도 불구하고 늦잠을 자지 않은 오늘의 코딩 1일 1문제! 오늘의 문제는 백준의 암기왕입니다.

백준의 암기왕을 파이썬으로 풀이하였습니다.

 

2776번: 암기왕

연종이는 엄청난 기억력을 가지고 있다. 그래서 하루 동안 본 정수들을 모두 기억 할 수 있다. 하지만 이를 믿을 수 없는 동규는 그의 기억력을 시험해 보기로 한다. 동규는 연종을 따라 다니며,

www.acmicpc.net

👨🏻‍💻 문제 풀이

간만에 날이 좋은 오늘! 즐겁게 문제를 풀어보았습니다.

사실 문제가 쉬워보이는데 그냥 쉬워보이는 내 생각 그대로 풀면 풀리지 않는 문제 일 것 같아서 풀었는데?

생각보다 그 방법으로 풀어보니 오히려 더 좋은 결과가 나와 조금은 의아했지만! 그래도 날이 좋아 뭐든 좋은 날입니다.

 

암기왕은 수첩1에 적혀있는 N개의 숫자와 수첩 2에 적혀있는 M개의 숫자를 주면서 

수첩 2에 적혀있는 숫자들을 순서대로 보면서 수첩 1에 있는지를 확인해보고 

지금 보고있는 숫자가 수첩 1에 있는 숫자라면 1을 수첩 1에 없는 숫자라면 0을 출력 하는 문제입니다.

 

먼저 입력을 받는 부분을 구현을 해보면

위와 같은 모양으로 되어있습니다.

가장 위의 숫자는 몇 개의 테스트 케이스가 주어질지에 대한 정보이고

그 아래는 수첩 1에 적힌 숫자의 개수인 N 그리고 그 다음은 수첩 1 속 숫자들이 공백을 기준으로 입력됩니다.

그 아래는 방금과 동일하게 수첩 2의 숫자개수 N과 수첩 2 속 숫자들입니다.

 

테스트 케이스의 수만큼 for 반복문을 돌고 그 반복문 안에서 수첩의 숫자들을 입력 받은 후 결과 출력까지 이루어집니다.

if __name__ == "__main__":
    for _ in range(int(input())):
        note1_num = int(input())
        note1 = input()
        note2_num = int(input())
        note2 = input()
        
        memorization_king(note1, note2)

 

이제는 암기왕 문제의 본 내용을 풀어보면

수첩 2의 숫자가 수첩 1에 존재하느냐 이걸 보면되는데

수첩 1에서는 숫자가 1개이건 2개이건 일단 존재만 하면 되므로 중복되는 숫자를 모두 제거해주었습니다.

이에 공백을 기준으로 입력된 문자열을 map(int, split)을 통해 정수 리스트로 만들어 주었고

set을 활용하여 중복 숫자를 제거하였습니다.

수첩 2의 숫자들은 그대로 가져가야하므로 set 대신 list로 변환해주었습니다.

note1 = set(map(int, note1.split()))
note2 = list(map(int, note2.split()))

그 다음 수첩2의 숫자가 수첩 1에 존재하느냐 이걸 봐야하는데 이건 in 을 활용했습니다.

솔직히 N의 값의 최대값이 1,000,000 이라고하여 시간초과가 날 줄 알았는데

그렇지 않고 맞았습니다! 가 나와 조금 놀랐습니다.

for post in note2:
    if post in note1:
        print(1)
    else:
        print(0)

존재하면 1 그렇지 않으면 0을 출력하도록 했습니다.

소요시간이 1440ms로 아슬아슬하게 2초 컷에 세이브로 들어왔습니다.

전체 코드는 아래를 참고해주세요.

👨🏻‍💻 코드 ( Solution )

def memorization_king(note1, note2):
    note1 = set(map(int, note1.split()))
    note2 = list(map(int, note2.split()))
    
    for post in note2:
        if post in note1:
            print(1)
        else:
            print(0)
    
    
if __name__ == "__main__":
    for _ in range(int(input())):
        note1_num = int(input())
        note1 = input()
        note2_num = int(input())
        note2 = input()
        
        memorization_king(note1, note2)
 

GitHub - SOMJANG/CODINGTEST_PRACTICE: 1일 1문제 since 2020.02.07

1일 1문제 since 2020.02.07. Contribute to SOMJANG/CODINGTEST_PRACTICE development by creating an account on GitHub.

github.com

Comments