본문 바로가기

STUDY

파이썬 스터디 ver2. 5주차

뒤돌면 할일이 "ㅎㅇ?" 하고 있는 주입니다. 정말 행복하네요.


https://www.acmicpc.net/problem/1920

 

1920번: 수 찾기

첫째 줄에 자연수 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 줄에는 N개의 정수 A[1], A[2], …, A[N]이 주어진다. 다음 줄에는 M(1 ≤ M ≤ 100,000)이 주어진다. 다음 줄에는 M개의 수들이 주어지는데, 이 수들

www.acmicpc.net

import sys

n = int(sys.stdin.readline())
a_lst = sys.stdin.readline().strip().split(' ', n)
m = int(sys.stdin.readline())
m_lst = sys.stdin.readline().strip().split(' ', m)
dic = dict()

for i in a_lst:
    dic[i] = 1
for i in m_lst:
    if i in dic:
        print(1)
    else:
        print(0)

첫째 줄에 자연수 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 줄에는 N개의 정수 A[1], A[2], …, A[N]이 주어진다. 다음 줄에는 M(1 ≤ M ≤ 100,000)이 주어진다. 다음 줄에는 M개의 수들이 주어지는데, 이 수들이 A안에 존재하는지 알아내는 프로그램 작성.

> 어 어디서 본 형식인데.. 하다 약 2주 전에 풀었던 문제와 접근법이 거의 같다 생각하여 조금.. 참고했읍니다. ㅎㅎ 이렇게 말하는 나 제법 솔직해요.. 비슷한 문제 풀었다고 첫 시도만에 풀어낸 나 제법 멋있어요...

 

https://www.acmicpc.net/problem/10845

 

10845번: 큐

첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지

www.acmicpc.net

import sys

n = int(sys.stdin.readline())
d = []

for i in range(n):
    demands = sys.stdin.readline().strip().split(' ')
    if demands[0] == 'push':
        d.insert(0, int(demands[1]))
    elif demands[0] == 'pop':
        if len(d) == 0:
            print(-1)
        else:
            print(d.pop())
    elif demands[0] == 'size':
        print(len(d))
    elif demands[0] == 'empty':
        print(int(len(d)==0))
    elif demands[0] == 'front':
        if len(d) == 0:
            print(-1)
        else:
            print(d[-1])
    elif demands[0] == 'back':
        if len(d) == 0:
            print(-1)
        else:
            print(d[0])

수를 저장하는 큐를 구현한 다음, 입력으로 주어지는 명령을 처리하는 프로그램 작성. 출력해야하는 명령이 주어질 때마다, 한 줄에 하나씩 출력.

> 이전에 queue 관련 문제를 풀 때 참고했던 블로그를 다시 한번 봤습니다. 큐는 기본적으로 FIFO를 따르므로 enqueue를 위해 append를 씁니다. collections의 deque를 주로 쓰는데, 양방향 연결 리스트라서 단순한 enqueue와 dequeue를 반복하기 위해서라면 리스트보다 훨씬 효율적이라고.. ;3

> 무지성으로 def pop(), def size(), def empty()등을 만들다 def push()를 어케 만들어야 하지..!?!!? 란 고민에 빠져 구글링을 했읍니다. 명령을 리스트처럼 생각해서 조건문으로 쓰셨더군요 다들... ㅎ.. ㅎㅎ 그래서 갈아엎었읍니다..

> 예제와 계속 다르게 출력이 되길래(front에 d[0], back에 d[-1]을 썼었음..) 뭘 잘못썼지? 싶어 아무리 찾아봐도 모르겠더라구요. 그래서 다른 분 풀이를 보고 바로 이해가 되었습니다. Queue는 FIFO란 걸.. 먼저 들어갔으면 먼저 나와야 한다는 뜻은 맨 뒤에 있는 것 = 제일 최근에 들어간 것, 맨 앞에 있는 것 = 제일 예전에 들어간 것이란 걸.. 

> 헷갈리긴 한데 이해하면 나름 쉬..쉽나?

(참고 블로그: https://mong9data.tistory.com/36?category=885885)

 

https://www.acmicpc.net/problem/10866

 

10866번: 덱

첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지

www.acmicpc.net

from collections import deque; import sys

n = int(sys.stdin.readline())
d = deque()

for i in range(n):
    demands = sys.stdin.readline().strip().split(' ')
    if demands[0] == "push_front":
        d.insert(0, int(demands[1]))
    elif demands[0] == "push_back":
        d.append(int(demands[1]))
    elif demands[0] == "pop_front":
        if len(d) == 0:
            print(-1)
        else:
            print(d.popleft())
    elif demands[0] == "pop_back":
        if len(d) == 0:
            print(-1)
        else:
            print(d.pop())
    elif demands[0] == "size":
        print(len(d))
    elif demands[0] == "empty":
        print(int(len(d)==0))
    elif demands[0] == "front":
        if len(d) == 0:
            print(-1)
        else:
            print(d[0])
    elif demands[0] == "back":
        if len(d) == 0:
            print(-1)
        else:
            print(d[-1])

정수를 저장하는 덱(Deque)를 구현한 다음, 입력으로 주어지는 명령을 처리하는 프로그램 작성. 출력해야하는 명령이 주어질 때마다, 한 줄에 하나씩 출력.

> 위의 문제와 거의 동일한데 deque를 쓴다는 점만 달라요. 이런 비슷하지만 다른 문제를 풀 때마다 괜히 뿌듯함을 느낍니다.. 훗ㅎ

 

얼마 안 남았어요. class3 딱기다려라


면목 없지만 이번 주 데이터분석은 못할 것 같습니다. 교수님들은 왜이렇게 과제를 좋아하실까요... 기말고사 공부도 해야하는데 말이죠. 그저.. 쉬고싶습니다. 빨리 종강...

 

'STUDY' 카테고리의 다른 글

파이썬 스터디 ver3. 2주차  (1) 2022.07.06
파이썬 스터디 ver3. 1주차  (0) 2022.06.27
파이썬 스터디 ver2. 4주차  (0) 2022.05.12
파이썬 스터디 ver2. 3주차  (1) 2022.05.08
파이썬 스터디 ver2. 2주차  (4) 2022.04.05