본문 바로가기
반응형

전체 글181

[자료구조] 스택, 큐 (파이썬) 탐색 많은 양의 데이터 중에서 원하는 데이터를 찾는 과정 자료구조 데이터를 표현하고 관리하고 처리하기 위한 구조 스택 후입 선출 구조 (LIFO) 재귀 함수의 수행 또한 스택 자료구조를 사용한다. 기본 자료 구조 사용 stack [5,3,2,1] stack.appned(3) stack.pop() print(stack) print(stack[::-1]) # 최하단 원소부터 출력 큐 선입 선출 구조 (FIFO) Collections 에서 제공하는 deque 라이브러리 사용 from collections import deque queue = deque() queue.append(5) queue.popleft() queue.reserve() # 순서를 역순으로 바꾸기 (정렬을 의미하지는 않음) x = list(.. 2021. 3. 10.
[백준] 회전하는 큐 1021 (파이썬) 문제 풀이 # 예제2 해석 # 1번 연산: 앞에 있는 것 빼기 (data.popleft()) # 2번 연산: 왼쪽으로 밀기 (data.append(data.popleft())) # 3번 연산: 오른쪽으로 밀기 (data.appendleft(data.pop())) n,m = 10, 3 value = [2,9,5] # 뽑아 내려는 수가 2 9 5 일 때 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] # 2 수행 후 2, 3, 4, 5, 6, 7, 8, 9, 10, 1 # 1 수행 후 3, 4, 5, 6, 7, 8, 9, 10, 1 # 3, 3, 3 수행 후 9, 10, 1, 3, 4, 5, 6, 7, 8 # 1 시행 후 10, 1, 3, 4, 5, 6, 7, 8 # 2,2,2,2 or 3,3,3,.. 2021. 3. 10.
[백준] 나무자르기 2805 (파이썬) 이진탐색 문제 입력 받아야 할 값과 데이터가 크기 때문에 이진탐색을 고려하였다. 입력 값을 빠르게 받기위해 sys.stdin.readline().rstrip() 함수를 사용한다. 시간 초과가 날 경우 pypy를 이용한다. 예 아니오로 나눌 수 있는 파라메틱 서치 문제는 재귀적으로 하는 것보다 반복문으로 푸는 것이 더 깔끔하다. # 예 아니오로 나눌 수 있는 파라메틱 서치 문제는 재귀적으로 하는 것보다 반복문으로 푸는 것이 더 깔끔하다. import sys n , m = list(map(int,sys.stdin.readline().rstrip().split())) # 나무 개수 n, 필요한 나무 길이 m array = list(map(int,sys.stdin.readline().rstrip().split(.. 2021. 3. 9.
[백준] 좌표 정렬하기2 11651 (파이썬) 람다 표현식과 key를 알고 있다면 풀수 있는 문제였다. 정렬에서 key의 의미 # key 매개변수 입력 key값으로는 함수가 들어가야 하며 이는 정렬 기준이 된다. # key 값은 람다(lambda 함수를 사용할 수 도 있다) array= [('바나나',2), ('사과',5), ('당근',3)] def setting(data): return data[1] result = sorted(array, key=setting) print(result) 람다 표현식(Lambda Express) 특정한 기능을 수행하는 함수를 한 줄에 작성할 수 있다 람다식은 파이썬의 정렬 라이브러리를 사용할 때, 정렬 기준(Key)을 설정할 때에도 자주 사용한다. def add(a, b): return a + b print(add.. 2021. 3. 9.
[Python] 코딩테스트에 필요한 파이썬 문법 정리 자료형 수 자료형 정수형 실수형 #소수부가 0일 때 0을 생략 a = 5. # 5.0 # 10억의 지수 표현 방식 (최단 경로문제에서 자주 사용) a = 1e9 # 100000000.0 # 컴퓨터는 2진수 체계이기 때문에 실수 덧셈을 정확히 하지 못한다. 보통 5째 자리에서 반올림 하면된다. a = 0.3 + 0.6 print(rount(a,4)) 수 자료형의 연산 a = 7 b = 3 # 나누기 a / b # 나머지 a % b # 몫 a // b # 거듭 연산자 a ** b # a의 b승 리스트 자료형 리스트 초기화 a = [1,2,3,4,5,6,7,8,9] print(a) print(a[4]) # 빈 리스트 선언 방법 a = list() a = [] # 크기가 N이고 모든 값이 0인 1차원 리스트 초.. 2021. 3. 8.
[백준] [재귀 분석 추가] 하노이의 탑 이동 순서 1759 (파이썬) def hanoi(n, a, b): n > 1: hanoi(n-1, a, 6-a-b) # 기둥이 1개 이상이면 그룹으로 묶인 n-1개 원판을 중간으로 먼저 다 옮기겠다 1, 2, 3이기 때문에 중간은 1,3을 뺀 값 print(a,b) # n번 째 기둥이 a -> b 로 옮겨짐 n > 1: # 기둥이 한개 이상이면 남은 기둥 (n-1)개를 중간에서 b로 옮기겠다. hanoi(n-1, 6-a-b, b) n = int(input()) print(2 ** n-1) # 총 이동해야하는 횟수 hanoi(n, 1, 3) # 3개 원판을 기둥 1에서 3으로 옮기겠다 재귀함수 개념 2021.03.08 - [Algorithm & Data structure] - 재귀 함수 재귀 함수 재귀 함수(Recursive Funct.. 2021. 3. 8.
[알고리즘] 재귀 함수 재귀 함수(Recursive Function) DFS와 BFS를 구현하려면 재귀 함수도 이해하고 있어야한다. 자기 자신을 다시 호출하는 함수 팩토리얼 예제 # 반복적으로 구현한 n! def factorial_interative(n): result = 1 # 1부터 n까지의 수를 차례대로 곱하기 for i in range(1,n+1) result *= i return result # 재귀적으로 구한 n! def factorial_recursive(n): if n [백준] 하노이의 탑 이동 순서 1759 (파이썬) def hanoi(n, a, b): n > 1: hanoi(n-1, a, 6-a-b) # 기둥이 1개 이상이면 그룹으로 묶인 n-1개 원판을 중간으로 먼저 다 옮기겠다 1, 2, 3이기 때문에 중.. 2021. 3. 8.
[백준] 암호 만들기 1759 (파이썬) import itertools import sys l, c = map(int,sys.stdin.readline().rstrip().split()) secret = sorted(list(sys.stdin.readline().rstrip().split())) data = ('a', 'e', 'i', 'o', 'u') for x in list(itertools.combinations(secret, l)): count = 0 for i in data: if i in x: count += 1 if count >= 1 and l - count >= 2: # 자음이 2개 이상이란 것을 고려하지 않았었다. print(''.join(x)) # 출력 초과 왜 그러지? 조합 값이 l이 아닌 4를 넣었다. itertools라.. 2021. 3. 8.
[백준] 소수 구하기 1929 (파이썬) # 소수 구하기 분류 # 시간 제한메모리 제한제출정답맞은 사람정답 비율 # 2 초256 MB92626260761851427.337% # 문제 # M이상 N이하의 소수를 모두 출력하는 프로그램을 작성하시오. # 입력 # 첫째 줄에 자연수 M과 N이 빈 칸을 사이에 두고 주어진다. (1 ≤ M ≤ N ≤ 1,000,000) M이상 N이하의 소수가 하나 이상 있는 입력만 주어진다. # 출력 # 한 줄에 하나씩, 증가하는 순서대로 소수를 출력한다. # 예제 입력 1 # 3 16 # 예제 출력 1 # 3 # 5 # 7 # 11 # 13 import math m,n = map(int, input().split()) array = [True for i in range(n+1)] #[True] * n+1 array[0.. 2021. 3. 8.
[백준] ACM 호텔 10250 (파이썬) # 문제 # ACM 호텔 매니저 지우는 손님이 도착하는 대로 빈 방을 배정하고 있다. 고객 설문조사에 따르면 손님들은 호텔 정문으로부터 걸어서 가장 짧은 거리에 있는 방을 선호한다고 한다. 여러분은 지우를 도와 줄 프로그램을 작성하고자 한다. 즉 설문조사 결과 대로 호텔 정문으로부터 걷는 거리가 가장 짧도록 방을 배정하는 프로그램을 작성하고자 한다. # 문제를 단순화하기 위해서 호텔은 직사각형 모양이라고 가정하자. 각 층에 W 개의 방이 있는 H 층 건물이라고 가정하자 (1 ≤ H, W ≤ 99). 그리고 엘리베이터는 가장 왼쪽에 있다고 가정하자(그림 1 참고). 이런 형태의 호텔을 H × W 형태 호텔이라고 부른다. 호텔 정문은 일층 엘리베이터 바로 앞에 있는데, 정문에서 엘리베이터까지의 거리는 무시한.. 2021. 3. 8.
[백준] 달팽이는 올라가고 싶다 2869 (파이썬) # 문제 # 땅 위에 달팽이가 있다. 이 달팽이는 높이가 V미터인 나무 막대를 올라갈 것이다. # 달팽이는 낮에 A미터 올라갈 수 있다. 하지만, 밤에 잠을 자는 동안 B미터 미끄러진다. 또, 정상에 올라간 후에는 미끄러지지 않는다. # 달팽이가 나무 막대를 모두 올라가려면, 며칠이 걸리는지 구하는 프로그램을 작성하시오. # 입력 # 첫째 줄에 세 정수 A, B, V가 공백으로 구분되어서 주어진다. (1 ≤ B < A ≤ V ≤ 1,000,000,000) # 출력 # 첫째 줄에 달팽이가 나무 막대를 모두 올라가는데 며칠이 걸리는지 출력한다. # 예제 입력 1 # 2 1 5 # 예제 출력 1 # 4 # 예제 입력 2 # 5 1 6 # 예제 출력 2 # 2 # 예제 입력 3 # 100 99 100000000.. 2021. 3. 8.
[백준] 크로아티아 알파벳 2941 (파이썬) # 예전에는 운영체제에서 크로아티아 알파벳을 입력할 수가 없었다. 따라서, 다음과 같이 크로아티아 알파벳을 변경해서 입력했다. # 크로아티아 알파벳변경 # čc= # ćc- # dždz= # đd- # ljlj # njnj # šs= # žz= # 예를 들어, ljes=njak은 크로아티아 알파벳 6개(lj, e, š, nj, a, k)로 이루어져 있다. 단어가 주어졌을 때, 몇 개의 크로아티아 알파벳으로 이루어져 있는지 출력한다. # dž는 무조건 하나의 알파벳으로 쓰이고, d와 ž가 분리된 것으로 보지 않는다. lj와 nj도 마찬가지이다. 위 목록에 없는 알파벳은 한 글자씩 센다. # 입력 # 첫째 줄에 최대 100글자의 단어가 주어진다. 알파벳 소문자와 '-', '='로만 이루어져 있다. # 단어는.. 2021. 3. 8.
[백준] 단어공부 1157 (파이썬) # 단어 공부 분류 # 시간 제한메모리 제한제출정답맞은 사람정답 비율 # 2 초128 MB88983343162773338.828% # 문제 # 알파벳 대소문자로 된 단어가 주어지면, 이 단어에서 가장 많이 사용된 알파벳이 무엇인지 알아내는 프로그램을 작성하시오. 단, 대문자와 소문자를 구분하지 않는다. # 입력 # 첫째 줄에 알파벳 대소문자로 이루어진 단어가 주어진다. 주어지는 단어의 길이는 1,000,000을 넘지 않는다. # 출력 # 첫째 줄에 이 단어에서 가장 많이 사용된 알파벳을 대문자로 출력한다. 단, 가장 많이 사용된 알파벳이 여러 개 존재하는 경우에는 ?를 출력한다. # 예제 입력 1 # Mississipi # 예제 출력 1 # ? # 예제 입력 2 # zZa # 예제 출력 2 # Z # 예.. 2021. 3. 8.
[백준] 셀프넘버 4673 (파이썬) # 셀프 넘버 출처다국어분류 # 시간 제한메모리 제한제출정답맞은 사람정답 비율 # 1 초256 MB70474354532848050.391% # 문제 # 셀프 넘버는 1949년 인도 수학자 D.R. Kaprekar가 이름 붙였다. 양의 정수 n에 대해서 d(n)을 n과 n의 각 자리수를 더하는 함수라고 정의하자. 예를 들어, d(75) = 75+7+5 = 87이다. # 양의 정수 n이 주어졌을 때, 이 수를 시작해서 n, d(n), d(d(n)), d(d(d(n))), ...과 같은 무한 수열을 만들 수 있다. # 예를 들어, 33으로 시작한다면 다음 수는 33 + 3 + 3 = 39이고, 그 다음 수는 39 + 3 + 9 = 51, 다음 수는 51 + 5 + 1 = 57이다. 이런식으로 다음과 같은 수열.. 2021. 3. 8.
[백준] 알람시계 2884 (파이썬) # 문제 # 상근이는 매일 아침 알람을 듣고 일어난다. 알람을 듣고 바로 일어나면 다행이겠지만, 항상 조금만 더 자려는 마음 때문에 매일 학교를 지각하고 있다. # 상근이는 모든 방법을 동원해보았지만, 조금만 더 자려는 마음은 그 어떤 것도 없앨 수가 없었다. # 이런 상근이를 불쌍하게 보던, 창영이는 자신이 사용하는 방법을 추천해 주었다. # 바로 "45분 일찍 알람 설정하기"이다. # 이 방법은 단순하다. 원래 설정되어 있는 알람을 45분 앞서는 시간으로 바꾸는 것이다. 어차피 알람 소리를 들으면, 알람을 끄고 조금 더 잘 것이기 때문이다. 이 방법을 사용하면, 매일 아침 더 잤다는 기분을 느낄 수 있고, 학교도 지각하지 않게 된다. # 현재 상근이가 설정한 알람 시각이 주어졌을 때, 창영이의 방법을.. 2021. 3. 8.
반응형