반응형

@notepad_jj2

츄르사려고 코딩하는 코집사입니다.


큐(Queue)

 

먼저 넣은 데이터를 가장 먼저 꺼내는 구조를 가지고 있는 데이터 구조.

데이터를 추가한 순서대로 제거할 수 있어서 스트리밍, 너비우선탐색(BFS) 등에서 응용

 

FIFO(First-In, First-Out) 방식

 

파이썬에서 List를 사용하여 큐(Queue)를 구현할 수 있지만, List는 무작위 접근(Random Access)에 최적화된 자료 구조이기 때문에 Queue로 사용하기엔 적합하지 않습니다.

 

즉, List에 접근하는 시간 복잡도는 O(N)이기 때문에, 데이터가 많으면 많을수록 그 만큼 속도가 느려진다는 단점을 가지고 있습니다.

 

 

큐(Queue)의 기능

Enqueue : 큐에 데이터를 넣는 기능

Dequeue : 큐에서 데이터를 꺼내는 기능

 

 

파이썬에서의 deque

파이썬에서 collections 모듈에서 deque는 양방향에서 추가하고 제거할 수 있는 구조를 제공합니다.

 

우선순위 큐(Priority Queue)

 

우선순위 큐(Priority Queue)는 데이터 추가는 순서가 상관 없지만, 삭제할 때는 가장 작은 값을 먼저 제거하는 큐입니다.

 

from queue import PriorityQueue

#우선순위 큐의 사이즈 Default는 무한대
#크기를 설정하려면 priority_queue = PriorityQueue(maxsize = 10) 처럼 지정
priority_queue = PriorityQueue()

priority_queue.put(1)
priority_queue.put(2)
priority_queue.put(3)
priority_queue.put(4)

print(priority_queue.get())
print(priority_queue.get())

 

반응형

'알고리즘 > 자료구조' 카테고리의 다른 글

파이썬 자료구조 배열(Array)  (0) 2020.09.29
반응형

@notepad_jj2

츄르사려고 코딩하는 코집사입니다.


귀여운 수~ε٩(๑> ₃ <)۶з 성공출처분류

시간 제한메모리 제한제출정답맞은 사람정답 비율

1 초 512 MB 1140 633 579 61.530%

문제

욱제는 귀여운 수~ε٩(๑> ₃ <)۶з를 좋아한다. 귀여운 수~ε٩(๑> ₃ <)۶з는 수를 이루는 각 자릿수가 등차수열[*]을 이루는 수이다. 당신은 욱제한테 귀여운 수~ε٩(๑> ₃ <)۶з 하나를 선물해주고 싶다. 수 하나가 주어졌을 때 이 수가 귀여운지 판단하는 프로그램을 짜 보자.

 

[*] 등차수열을 이루는 숫자들은, 왼쪽에서 오른쪽으로 가면서 일정한 크기(0일 수도 있음)만큼 커지거나 일정한 크기만큼 작아진다. 뭔지 모르겠으면 예제를 보고 알아보자. ㅋㅋ!

입력

정수 k(1≤k≤1018)가 주어진다. 입력은 0으로 시작하지 않는다.

출력

수가 귀여우면 "◝(⑅•ᴗ•⑅)◜..°♡ 뀌요미!!"를, 귀엽지 않으면 "흥칫뿡!! <( ̄ ﹌  ̄)>"를 따옴표 없이 출력한다.


N = list(map(int, list(input())))

if len(N) == 1 :
    print('◝(⑅•ᴗ•⑅)◜..°♡ 뀌요미!!')

else :
    value = int(N[0]) - int(N[1])
    for i in range(len(N)-1) :
        if N[i] - N[i+1] != value :
            print('흥칫뿡!! <( ̄ ﹌  ̄)>')        
            break

    else : 
        print('◝(⑅•ᴗ•⑅)◜..°♡ 뀌요미!!')

 

반응형
반응형

@notepad_jj2

츄르사려고 코딩하는 코집사입니다.


엔드게임 스포일러 출처분류

시간 제한메모리 제한제출정답맞은 사람정답 비율

1 초 512 MB 1864 1467 1421 80.556%

문제

어벤져스: 엔드게임》(영어: Avengers: Endgame)은 2019년 개봉한 미국의 슈퍼히어로 영화로, 마블 코믹스의 동명 팀을 원작으로 하고 있으며, 마블 스튜디오가 제작하고, 월트 디즈니 스튜디오스 모션 픽처스가 배급하였다. 이 영화는 2012년 영화 어벤져스와, 2015년 영화 어벤져스: 에이지 오브 울트론, 2018년 영화 어벤져스: 인피니티 워의 속편이자, 마블 시네마틱 유니버스 (MCU)의 22번째 작품에 해당한다. 앤서니 루소와 조 루소가 감독하고 크리스토퍼 마커스와 스티븐 맥필리가 공동으로 각본을 썼으며, 이전의 MCU 영화에보다도 많은 배우와 앙상블 캐스트들이 등장한다.

그래서 욱제는 이 문제에서 엔드게임 스포일러를 하려고 한다.

입력

어벤져스: 엔드게임의 줄거리가 주어진다.

출력

어벤져스: 엔드게임의 영문 표기를 출력한다.

예제 입력 1 복사

타노스가 전 우주의 모든 생명체 절반을 제거하기 위해 인피니티 건틀렛을

예제 출력 1 복사

문제의 답을 출력한다.


print('Avengers: Endgame')

 

출력으로 Avengers: Endgame을 출력하면 된다.

반응형
반응형

@notepad_jj2

츄르사려고 코딩하는 코집사입니다.


고무오리 디버깅 성공출처

시간 제한메모리 제한제출정답맞은 사람정답 비율

1 초 512 MB 286 163 150 67.568%

문제

백준 문제 풀이에 힘들어하는 수진이를 위해 민우는 문제해결에 도움이 되는 고무오리를 준비했다. 민우가 준비한 고무오리는 신비한 능력이 존재하는데, 최근에 풀던 백준 문제를 해결해주는 능력이다. 신비한 고무오리와 함께 수진이의 백준 풀이를 도와주자! 고무오리의 사용법은 다음과 같다 - "고무오리 디버깅 시작" 이라고 외친다 - 문제들을 풀기 시작한다 - 고무오리를 받으면 최근 풀던 문제를 해결한다 - "고무오리 디버깅 끝" 이라고 외치면 문제풀이를 종료한다. 하지만 고무오리에는 치명적인 문제가 있는데, 풀 문제가 없는데 사용한다면 고무오리는 체벌로 두 문제를 추가한다는 점이다.

입력

첫 번째 줄에 "고무오리 디버깅 시작"이라고 주어진다. 두 번째 줄부터 "고무오리" 또는 "문제"가 주어진다. 이는 "고무오리 디버깅 끝"이 주어질 때까지 반복한다.

출력

고무오리 디버깅이 끝날 때, 주어진 문제를 수진이가 해결하였는지 여부에 따라 남은 문제 없이 모든 문제를 해결하였으면 "고무오리야 사랑해"을 출력하고 하나라도 문제가 남았다면 "힝구"를 출력하라.


A = input()
if A == '고무오리 디버깅 시작' :
    pro = 0
    while(True) :
        B = input()
        if B == '고무오리 디버깅 끝' :
            if pro == 0 :
                print('고무오리야 사랑해')
                break
            else :
                print('힝구')
                break
        elif B == '문제' :
            pro += 1
        elif B == '고무오리' and pro == 0 :
            pro += 2
        elif B == '고무오리' and pro != 0 :
            pro -= 1

 

반응형
반응형

@notepad_jj2

츄르사려고 코딩하는 코집사입니다.


최대공약수와 최소공배수 성공출처분류

시간 제한메모리 제한제출정답맞은 사람정답 비율

1 초 128 MB 29454 17987 14777 63.645%

문제

두 개의 자연수를 입력받아 최대 공약수와 최소 공배수를 출력하는 프로그램을 작성하시오.

입력

첫째 줄에는 두 개의 자연수가 주어진다. 이 둘은 10,000이하의 자연수이며 사이에 한 칸의 공백이 주어진다.

출력

첫째 줄에는 입력으로 주어진 두 수의 최대공약수를, 둘째 줄에는 입력으로 주어진 두 수의 최소 공배수를 출력한다.

예제 입력 1 복사

24 18

예제 출력 1 복사

6 72


A, B = map(int, input().split())
#유클리드 호제법을 이용한 최대공약수 구하기
def UC(X, Y):
    while(Y):
        X, Y = Y, X%Y
    return X

#유클리드 호제법을 이용한 최소공배수 구하기
def UC2(X, Y):
    result = (X*Y) // UC(X,Y)
    return result
print(UC(A,B))
print(UC2(A,B))

 

유클리드 호제법을 통해 문제를 풀 수 있습니다.

yongku.tistory.com/entry/%ED%8C%8C%EC%9D%B4%EC%8D%ACPython-%EC%B5%9C%EB%8C%80%EA%B3%B5%EC%95%BD%EC%88%98%EC%99%80-%EC%B5%9C%EC%86%8C%EA%B3%B5%EB%B0%B0%EC%88%98

 

파이썬(Python) 최대공약수와 최소공배수

1. 최대공약수 두 수 X와 Y가 있을 때, X의 약수이면서 Y의 약수인 수(공약수) 중 최대값을 가진 값을 최대공약수라고 합니다. 우리가 초등학교 시절에 배웠던 방법은 아래와 같습니다. 12와 16의 공

yongku.tistory.com

 

반응형
반응형

@notepad_jj2

츄르사려고 코딩하는 코집사입니다.


1. Seaborn이란?

1) matplotlib를 기반으로 한 파이썬 데이터 시각화 라이브러리

2) 매력적이고 유익한 통계 그래픽을 그리기 위한 High-level의 인터페이스 제공

 

2. Seaborn plot 종류

- 예제 데이터는 seaborn 라이브러리에서 제공하는 iris 데이터를 사용했습니다.

from matplotlib import pyplot as plt
import seaborn as sns

iris = sns.load_dataset('iris')

iris.head()

 

1) regplot

- regplot은 선형회귀분석처럼 데이터들의 선형성을 확인할 수 있습니다.

ax = sns.regplot(x='sepal_length', y='sepal_width', data = iris)
ax.set_xlabel('sepal_length')
ax.set_ylabel('sepal_width')
ax.set_title('iris regplot')

 

2) jointplot

- regplot처럼 선형성은 확인할 수 없지만, 점 데이터 분포를 확인할 수 있고, 바깥쪽 그래프에서 막대그래프도 밀집도를 확인할 수 있다.

ax = sns.jointplot(x='sepal_length', y='sepal_width', data = iris)

 

3) kde

- 기상예보의 등고선 형태로 데이터의 밀집 정도를 확인할 수 있다.

kde, ax = plt.subplots()
ax = sns.kdeplot(data=iris['sepal_length'],
           data2=iris['sepal_width'],
           shade=True)

 

4) barplot

ax = sns.barplot(x = 'species', y = 'sepal_width', data = iris)

 

5) boxplot

ax = sns.boxplot(x = 'species', y = 'sepal_width', data = iris)

 

6) pairplot

ax = sns.pairplot(data = iris)

 

7) countplot

ax = sns.countplot(x = 'species', data = iris)

반응형
반응형

안녕하세요, 츄르 사려고 코딩하는 집사! 코집사입니다.

안녕하세요, 츄르 사려고 코딩하는 집사! 코집사입니다.


설탕 배달 성공출처다국어분류

한국어   

시간 제한메모리 제한제출정답맞은 사람정답 비율

1 초 128 MB 131407 39564 31901 31.863%

문제

상근이는 요즘 설탕공장에서 설탕을 배달하고 있다. 상근이는 지금 사탕가게에 설탕을 정확하게 N킬로그램을 배달해야 한다. 설탕공장에서 만드는 설탕은 봉지에 담겨져 있다. 봉지는 3킬로그램 봉지와 5킬로그램 봉지가 있다.

상근이는 귀찮기 때문에, 최대한 적은 봉지를 들고 가려고 한다. 예를 들어, 18킬로그램 설탕을 배달해야 할 때, 3킬로그램 봉지 6개를 가져가도 되지만, 5킬로그램 3개와 3킬로그램 1개를 배달하면, 더 적은 개수의 봉지를 배달할 수 있다.

상근이가 설탕을 정확하게 N킬로그램 배달해야 할 때, 봉지 몇 개를 가져가면 되는지 그 수를 구하는 프로그램을 작성하시오.

입력

첫째 줄에 N이 주어진다. (3 ≤ N ≤ 5000)

출력

상근이가 배달하는 봉지의 최소 개수를 출력한다. 만약, 정확하게 N킬로그램을 만들 수 없다면 -1을 출력한다.

예제 입력 1 복사

18

예제 출력 1 복사

4


N = int(input()) #1

result = 0 #2

while True : #3
    if N % 5 == 0 : #4
        result = result + (N // 5) #5
        print(result) 
        break
    
    N -= 3 #6
    result += 1 #7
    
    if N < 0 : #8
        print(-1)
        break

 

#1 : 설탕 kg 입력

#2 : 봉지의 갯수

#3 : 설탕에 대한 반복문. 설탕이 3kg 봉지나 5kg 봉지로 못 담을 경우 -1 반환하고, 봉지 갯수를 계산하기 위한 반복문

#4 : 설탕을 5kg 봉지에 한 번에 담을 수 있을 경우

#5 : result에 N을 5로 나눈 몫을 넣어 출력

#6 : if문에 들어가지 못하는 경우에는 입력한 N의 설탕에서 3kg을 빼고, 

#7 : result(봉지의 갯수)를 1 증가 while문 반복

#8 : 설탕이 0보다 작으면 -1 출력

반응형
반응형

안녕하세요, 츄르 사려고 코딩하는 집사! 코집사입니다.

안녕하세요, 츄르 사려고 코딩하는 집사! 코집사입니다.


알파벳 찾기 성공분류

시간 제한메모리 제한제출정답맞은 사람정답 비율

1 초 256 MB 57021 30566 26065 54.853%

문제

알파벳 소문자로만 이루어진 단어 S가 주어진다. 각각의 알파벳에 대해서, 단어에 포함되어 있는 경우에는 처음 등장하는 위치를, 포함되어 있지 않은 경우에는 -1을 출력하는 프로그램을 작성하시오.

입력

첫째 줄에 단어 S가 주어진다. 단어의 길이는 100을 넘지 않으며, 알파벳 소문자로만 이루어져 있다.

출력

각각의 알파벳에 대해서, a가 처음 등장하는 위치, b가 처음 등장하는 위치, ... z가 처음 등장하는 위치를 공백으로 구분해서 출력한다.

만약, 어떤 알파벳이 단어에 포함되어 있지 않다면 -1을 출력한다. 단어의 첫 번째 글자는 0번째 위치이고, 두 번째 글자는 1번째 위치이다.

예제 입력 1 복사

baekjoon

예제 출력 1 복사

1 0 -1 -1 2 -1 -1 -1 -1 4 3 -1 -1 7 5 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1

 


A = input()

#eng = list('abcdefghijklmnopqrstuvwxyz')

from string import ascii_lowercase
eng = list(ascii_lowercase)

for i in range(len(eng)) :
    print(A.find(eng[i]), end=" ")

 

ascii_lowercase 라이브러리를 사용한 알파벳 리스트 생성

 

알파벳 리스트 생성하는 방법은 다양하다.

 

1. eng = list('abcdefghijklmnopqrstuvwxyz')를 사용해도 된다.

2. eng = range(97, 123) #97번부터 영어 알파벳 소문자 아스키코드 시작

 

 

find 함수를 사용하면, 없을 경우 -1 출력 있으면 index 출력

 

 

 

반응형
반응형

안녕하세요, 츄르 사려고 코딩하는 집사! 코집사입니다.

안녕하세요, 츄르 사려고 코딩하는 집사! 코집사입니다.


자료구조란?

 

정의

 

컴퓨터에서 데이터들을 효율적으로 관리(저장, 삭제, 수정 등)할 수 있도록 하는 데이터의 구조를 의미합니다.

 

데이터의 특성, 데이터 간의 관계 등 효율적인 데이터 관리를 위해 효율적인 알고리즘을 사용하고, 알고리즘을 통해 시간 복잡도나 코드의 효율성, 성능을 결정하곤 합니다.

 

종류

 

자료구조의 종류는 배열(Array), 스택(Stack), 큐(Queue), 링크드 리스트(Linked list), 힙(Heap), 트리(Tree) 등이 있습니다.

 

Python에서는 Tuple, List, Dictionary, set 등으로 자료구조의 대부분을 구현할 수 있습니다.


배열(Array)

 

Python에서 배열은 List로 쉽게 구현할 수 있습니다.

 

Python에서 배열은 같은 종류의 데이터를 순차적으로 저장할 수 있으며, Index를 통해 리스트의 값들에 접근을 할 수 있습니다.

 

A라는 리스트에 1,2,3,4,5를 넣고, print 문 또는 for문을 이용하여 A의 리스트에 있는 값들을 출력할 수 있습니다.

Python에서 Index는 0부터 시작하며 아래의 A 리스트의 0번 Index는 1입니다.

 

장점

  • Python에서 Index를 통해 리스트의 값들에 직접 접근을 할 수 있습니다.
  • 리스트의 값에 직접 접근을 하기 때문에 빠른 접근이 가능합니다.

단점

  • 빈 리스트로 정의하여 데이터의 추가와 삭제가 효율적이지 못합니다. 추가할 경우에는 리스트의 메모리 공간이 많이 필요하며, 삭제할 경우에는 메모리의 빈 공간이 생겨 처리를 해줘야 합니다.
  • 리스트의 길이 조절이 어렵습니다.

배열(Array) 연산

 

  • A.append(obj)

- A의 리스트에 추가시킨다. 뒤에 추가.

  • A.extend(list)

- A의 리스트에 list를 연결하여 확장한다.

  • A.insert(index, obj)

- A의 리스트에 지정한 인덱스 위치에 obj를 추가한다.

  • del A[index]

- A의 지정한 인덱스에 있는 리스트의 값을 삭제한다.

  • A.pop(index)

- A의 리스트에서 지정한 인덱스의 리스트 값을 삭제한다.

  • A.remove(obj)

- A의 리스트에서 0이라는 리스트의 값을 삭제한다.

  • A.reverse()

- A의 리스트의 값들의 순서를 반대로 배열한다.

  • A.sort()

- A의 리스트를 정렬한다.

- Default는 오름차순, 내림차순으로 설정하려면 A.sort(reverse = True) 사용

  • A.index(obj)

- A의 리스트에 있는 값의 인덱스 위치를 출력한다.

  • A.count(obj)

- A의 리스트에 obj가 몇 개 있는지 출력한다.


2차원 배열(Array)

 

2차원 배열은 행과 열로 구성된 것을 말합니다.

 

2차원 배열(Array) 선언

 

for문을 이용한 2차원 배열 선언

- 아래의 코드처럼 2중 for문을 사용하여 2차원 배열을 선언할 수 있다.

 

- 아래의 for문은 코드를 줄여 사용한 것이고, 풀어쓴 코드는 그 아래의 코드다.

 

반응형

'알고리즘 > 자료구조' 카테고리의 다른 글

파이썬 자료구조 큐(Queue)  (0) 2020.10.05
반응형

test

반응형

+ Recent posts