일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- 데이콘
- 코로나19
- github
- ChatGPT
- 금융문자분석경진대회
- 파이썬
- gs25
- 편스토랑 우승상품
- 캐치카페
- leetcode
- 프로그래머스
- SW Expert Academy
- Kaggle
- 자연어처리
- 맥북
- 프로그래머스 파이썬
- programmers
- 편스토랑
- Docker
- 더현대서울 맛집
- PYTHON
- AI 경진대회
- ubuntu
- 우분투
- dacon
- 백준
- Real or Not? NLP with Disaster Tweets
- Git
- hackerrank
- Baekjoon
- Today
- Total
솜씨좋은장씨
[BaekJoon] 2776번 : 암기왕 (Python) 본문
간만에 주말인데도 불구하고 늦잠을 자지 않은 오늘의 코딩 1일 1문제! 오늘의 문제는 백준의 암기왕입니다.
백준의 암기왕을 파이썬으로 풀이하였습니다.
👨🏻💻 문제 풀이
간만에 날이 좋은 오늘! 즐겁게 문제를 풀어보았습니다.
사실 문제가 쉬워보이는데 그냥 쉬워보이는 내 생각 그대로 풀면 풀리지 않는 문제 일 것 같아서 풀었는데?
생각보다 그 방법으로 풀어보니 오히려 더 좋은 결과가 나와 조금은 의아했지만! 그래도 날이 좋아 뭐든 좋은 날입니다.
암기왕은 수첩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)
'Programming > 코딩 1일 1문제' 카테고리의 다른 글
[Programmers] 위클리 챌린지 6주차 - 복서 정렬하기 (Python) (0) | 2021.09.06 |
---|---|
[BaekJoon] 5800번 : 성적 통계 (Python) (0) | 2021.09.05 |
[SW Expert Academy] 12368번 : 24시간 (Python) (0) | 2021.09.03 |
[BaekJoon] 10984번 : 내 학점을 구해줘 (Python) (0) | 2021.09.02 |
[BaekJoon] 5656번 : 비교 연산자 (Python) (0) | 2021.09.01 |