algorithm 29

[BAEKJOON] 3273번: 두 수의 합 - 파이썬(python)

투 포인트 문제 풀기! 문제 n개의 서로 다른 양의 정수 a1, a2,..., an으로 이루어진 수열이 있다. ai의 값은 1보다 크거나 같고, 1000000보다 작거나 같은 자연수이다. 자연수 x가 주어졌을 때, ai + aj = x (1 ≤ i < j ≤ n)을 만족하는 (ai, aj) 쌍의 수를 구하는 프로그램을 작성하시오. 입력 첫째 줄에 수열의 크기 n이 주어진다. 다음 줄에는 수열에 포함되는 수가 주어진다. 셋째 줄에는 x가 주어진다. (1 ≤ n ≤ 100000, 1 ≤ x ≤ 2000000) 출력 문제의 조건을 만족하는 쌍의 개수를 출력한다. 예제 입력 1 9 5 12 7 10 9 1 2 3 11 13 예제 출력 1 3 코드 제출 n = int(input()) # 원소의 개수 numbers..

algorithm 2021.07.01

[BAEKJOON] 4949번: 균형잡힌 세상 - 파이썬(python)

균형잡힌 세상 문제 세계는 균형이 잘 잡혀있어야 한다. 양과 음, 빛과 어둠 그리고 왼쪽 괄호와 오른쪽 괄호처럼 말이다. 정민이의 임무는 어떤 문자열이 주어졌을 때, 괄호들의 균형이 잘 맞춰져 있는지 판단하는 프로그램을 짜는 것이다. 문자열에 포함되는 괄호는 소괄호("()") 와 대괄호("[]")로 2종류이고, 문자열이 균형을 이루는 조건은 아래와 같다. 모든 왼쪽 소괄호("(")는 오른쪽 소괄호(")")와만 짝을 이뤄야 한다. 모든 왼쪽 대괄호("[")는 오른쪽 대괄호("]")와만 짝을 이뤄야 한다. 모든 오른쪽 괄호들은 자신과 짝을 이룰 수 있는 왼쪽 괄호가 존재한다. 모든 괄호들의 짝은 1:1 매칭만 가능하다. 즉, 괄호 하나가 둘 이상의 괄호와 짝지어지지 않는다. 짝을 이루는 두 괄호가 있을 때,..

algorithm 2021.06.29

[프로그래머스 level1] 로또의 최고 순위와 최저 순위 - 파이썬

💡 문제 설명 로또 6/45(이하 '로또'로 표기)는 1부터 45까지의 숫자 중 6개를 찍어서 맞히는 대표적인 복권입니다. 아래는 로또의 순위를 정하는 방식입니다. 순위 당첨 내용 1 6개 번호가 모두 일치 2 5개 번호가 일치 3 4개 번호가 일치 4 3개 번호가 일치 5 2개 번호가 일치 6(낙첨) 그 외 로또를 구매한 민우는 당첨 번호 발표일을 학수고대하고 있었습니다. 하지만, 민우의 동생이 로또에 낙서를 하여, 일부 번호를 알아볼 수 없게 되었습니다. 당첨 번호 발표 후, 민우는 자신이 구매했던 로또로 당첨이 가능했던 최고 순위와 최저 순위를 알아보고 싶어 졌습니다. 알아볼 수 없는 번호를 0으로 표기하기로 하고, 민우가 구매한 로또 번호 6개가 44, 1, 0, 0, 31 25라고 가정해보겠습니..

algorithm 2021.06.20

[프로그래머스 level1] 실패율 - 파이썬

💡 문제 설명 슈퍼 게임 개발자 오렐리는 큰 고민에 빠졌다. 그녀가 만든 프렌즈 오천성이 대성공을 거뒀지만, 요즘 신규 사용자의 수가 급감한 것이다. 원인은 신규 사용자와 기존 사용자 사이에 스테이지 차이가 너무 큰 것이 문제였다. 이 문제를 어떻게 할까 고민 한 그녀는 동적으로 게임 시간을 늘려서 난이도를 조절하기로 했다. 역시 슈퍼 개발자라 대부분의 로직은 쉽게 구현했지만, 실패율을 구하는 부분에서 위기에 빠지고 말았다. 오렐리를 위해 실패율을 구하는 코드를 완성하라. 실패율은 다음과 같이 정의한다. 스테이지에 도달했으나 아직 클리어하지 못한 플레이어의 수 / 스테이지에 도달한 플레이어 수 전체 스테이지의 개수 N, 게임을 이용하는 사용자가 현재 멈춰있는 스테이지의 번호가 담긴 배열 stages가 매..

algorithm 2021.06.19

[python] 선택 정렬 (selection sort)

정의 선택 정렬이란 배열에서 가장 작은 원소를 찾아 첫 번째 원소와 교환하고, 두 번째 작은 원소를 찾아 두 번째 원소와 교환하는 방식으로 전체가 정렬될 때까지 계속함 정의 - 제자리 정렬 - 불안정적 - 입력 자료의 순서에 민감하지 않음 - 작은 키와 매우 큰 레코드를 가지는 화일을 정렬하는데 적합함 선택 정렬 ADL selectionSort(a[], n) for (i ← 1; i < n; i ← i + 1) do { minIndex ← i; for (j ← i + 1; j ≤ n; j ← j + 1) do if (a[j] < a[minIndex]) then minIndex ← j; a[i]와 a[minIndex]를 교환; } end selectionSort() 선택 정렬 구현 def selection..

algorithm 2020.11.22

[python] RSA (Rivest, Shamir and Adleman) 알고리즘

RSA 암호 알고리즘은 대표적인 공개키 알고리즘 중 하나로 소인수 분해의 어려움을 이용한 방식을 사용하고 있다. 사용자는 각각 공개키와 개인키를 갖고 있다 메시지를 보낼때는 송신자가 수신자의 공개키로 암호화 한 후 전송하면 수신자는 수신자의 개인키로 복호화한다. 1. 먼저 2개의 소수(p, q)를 선택합니다. 2. n 을 구합니다 n = p * q 3. φ(n)을 구합니다 φ(n) = (p-1)(q-1) 4. 1 < e < φ(n) 을 만족하는 φ(n)과 서로소인 자연수 e를 구합니다 5. e mod φ(n) = 1 을 만족하는 d를 구합니다 여기서 공개키는 (n, e) 쌍이 되고, 개인키는 d 가 됩니다. # RSA 암호화 프로그램 def encipher(p, n, pk): c = '' i = 0 wh..

algorithm 2020.11.06

[python] 비즈네르(Vigenere) 암호화 알고리즘

비즈네르 암호화란 평문의 각 문자에 대해 서로 다른 변환표를 사용하는 것이다. 여기서 평문의 문자들은 위치에 따라 다른 간격의 밀기 방식으로 치환하여 사용한다 예를들어, 아래와 같은 키와 평문이 있다고 한다면 키 : "ABC" 평문 : "SAVE PRIVATE RYAN" 키 A B C A B C A B C A B C 평문 S A V E P R I V A T E 암호문 T C Y F B S S K Y B V H 와 같이 된다. A 부분에서는 1칸을 뛴 문자가 오고, B부분에서는 2칸을 뛴 문자가 오고, C부분에서는 3칸을 뛴 문자가 오는것이다. * 띄어쓰기 같은 경우는 A 앞이라고 가정하고 띄어쓰기에서 2칸(B)를 만나면 B가 된다. (띄어쓰기) -> A -> B def encipher(p, k): c =..

algorithm 2020.11.05

[python] 카이사르 암호화(Caesar cipher) 알고리즘

카이사르 암호화란 고대 로마의 카이사르가 사용했다고 알려졌다. 평문에 있는 문자가 알파벳의 N번째 문자라면, 이것을 N+K 번째 문자로 교체하는 원리 예를 들어 K = 1 이라고 한다면, A -> B 가 되고, B -> C가 되는 원리 예를들어 'APPLE BANANA' 라는 문장이 있고 k = 1 이라면 암호문은 'BQQMFACBOBOB' 가 될 것이다. * 여기 암호문에서의 A는 빈칸을 의미한다. 이유는 A~Z 중 A앞에 공백부터 시작한다고 생각하면 쉽다. (빈칸) A B C ... X Y Z def encipher(p, k): c = '' for i in range(len(p)): a = ord(p[i]) if a == 32: a = 64 t = a + k if t > 90: t -= 27 if t..

algorithm 2020.11.04

[python] 보이어 무어 알고리즘 (Boyer Moore Algorithm)

보이어 무어 알고리즘은 텍스트에서 특정한 패턴(텍스트)을 탐색하는 알고리즘입니다. 또한 오른쪽에서 왼쪽으로 스트링 탐색을 진행합니다. 예를 들어 텍스트 STRING STARTING CONSISTING에 대하여 패턴 STING을 탐색하는 수행과정을 본다면 먼저 STING이라는 패턴에 대한 skip 배열을 구하여야 합니다. * STING 일 때의 skip 배열 G N I T S 다른 모든 문자 0 1 2 3 4 5 위와 같은 skip 배열의 숫자는 만약 텍스트가 일치하지 않을 경우 얼마만큼 건너뛰어야 하는지 표시한 것입니다. * 오른쪽에서 왼쪽으로 탐색을 진행하기 대문에 먼저 N과 G를 비교해보면, 서로 다른 문자임을 알 수 있습니다 위에 N 이란 단어는 skip 배열에서 1이란 숫자를 표시하고 있으므로 한..

algorithm 2020.10.27