본문 바로가기

Algorithm

(16)
[Python] 알파벳 리스트 쉽게 만들기 from string import ascii_lowercase lst = list(ascii_lowercase)
[Python] set 연산 setA = set([...]) setB = set([...]) #합집합 setA | setB setA.union(setB) #교집합 setA & setB setA.intersection(setB) #차집합 setA - setB setA.difference(setB) #대칭차집합 setA ^ setB #추가 setA.update([4,5,6]) #제거 setA.remove(6)
[Python] 문자열에서 find 함수 https://www.acmicpc.net/problem/10809 10809번: 알파벳 찾기 각각의 알파벳에 대해서, a가 처음 등장하는 위치, b가 처음 등장하는 위치, ... z가 처음 등장하는 위치를 공백으로 구분해서 출력한다. 만약, 어떤 알파벳이 단어에 포함되어 있지 않다면 -1을 출 www.acmicpc.net 처음에 이중 for문으로 일일이 구하려다 find라는 함수가 있는 것을 알게 됐다. find 함수는 문자열에서만 쓸 수 있으며, 찾음을 당하는 문자열.find(찾고싶은문자) 이렇게 쓰면 된다. 찾으면 해당하는 인덱스 번호를 출력하고, 찾지 못하면 -1를 출력한다. 이와 비슷한 기능을 하는 index 함수가 있는데, index 함수는 문자열 뿐만 아니라 리스트, 튜플 등에서도 사용할 수..
[백준 1929번] set 정렬 https://www.acmicpc.net/problem/1929 1929번: 소수 구하기 첫째 줄에 자연수 M과 N이 빈 칸을 사이에 두고 주어진다. (1 ≤ M ≤ N ≤ 1,000,000) M이상 N이하의 소수가 하나 이상 있는 입력만 주어진다. www.acmicpc.net 처음에 import math import sys def is_prime_eratos(x): array = [True for _ in range(x+1)] for i in range(2, int(math.sqrt(x))+1): if array[i]==True: j=2 while i*j
[Python] DFS, BFS def dfs(graph, v, visited): # graph: 각 노드가 연결된 정보 visited[v] = True # 현재 노드 방문 처리 print(v, end=' ') for i in graph[v]: # 현재 노드(graph[v]와 연결된 노드를 재귀적으로 방문 if not visited[i]: dfs(graph, i, visited) # 참고로, visited의 초기값은 visited=[False]*(n+1)로 초기화를 해주는데, # n이 아니라 (n+1)인 이유는 0번 인덱스는 비워두고 사용하지 않기 때문이다. from collections import deque def bfs(graph, start, visited): queue = deque([start]) visited[start] ..
그리디 - 큰 수의 법칙 문제 '큰 수의 법칙'은 일반적으로 통계 분야에서 다루어지는 내용이지만 동빈이는 본인만의 방식으로 다르게 사용하고 있다. 동빈이의 큰 수의 법칙은 다양한 수로 이루어진 배열이 있을 때 주어진 수들을 M번 더하여 가장 큰 수를 만드는 법칙이다. 단, 배열의 특정한 인덱스(번호)에 해당하는 수가 연속해서 K번을 초과하여 더해질 수 없는 것이 이 법칙의 특징이다. 예를 들어 순서대로 2, 4, 5, 4, 6으로 이루어진 배열이 있을 때 M이 8이고, K가 3이라고 가정하자. 이 경우 특정한 인덱스의 수가 연속해서 세 번까지만 더해질 수 있으므로 큰 수의 법칙에 따른 결과는 6 + 6 + 6 + 5 + 6 + 6 + 6 + 5인 46이 된다. 단, 서로 다른 인덱스에 해당하는 수가 같은 경우에도 서로 다른 것으..
피보나치 수열의 항 구하기 (피사노 주기) 문제 피보나치 수열에 대한 정의가 다음과 같이 재귀적으로 주어졌다고 하자. f(0) = f(1) = 1 f(n) = (f(n-1) + f(n-2)) % 1,000,000, for all 2
차대값과 차소값 찾기 문제 주어진 N개의 숫자에서 차소값(두번째로 작은 값)과 차대값(두번째로 큰 값)과 차대값, 차소값의 합을 출력하라. N은 5보다 크고 1000보다 작은 수이다. 주어지는 각 숫자는 1보다 크거나 같고, 2^32(2의 32승)보다 작은 값이다. 이때, 주어지는 숫자들은 모두 서로 다른(distinct)값이라고 가정해도 된다. Input 첫 번째 줄에 입력값 N이 주어진다. 두 번째 줄에 N개의 숫자가 주어진다. Output 주어진 N개의 숫자 중에서 차소값, 차대값, 차소값과 차대값의 합을 순서대로 출력한다. Sample Input 15 2 3 5 8 12 1 7 10 13 30 6 14 15 18 22 Sample Output 2 22 24 이 문제의 포인트는 주어지는 숫자의 범위는 부호 없는 정수형의..