본문 바로가기
반응형

항해9993

[백준] 좌표 정렬하기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.
[백준] 평균은 넘겠지 4344 (파이썬) # 문제 # 대학생 새내기들의 90%는 자신이 반에서 평균은 넘는다고 생각한다. 당신은 그들에게 슬픈 진실을 알려줘야 한다. # 입력 # 첫째 줄에는 테스트 케이스의 개수 C가 주어진다. # 둘째 줄부터 각 테스트 케이스마다 학생의 수 N(1 ≤ N ≤ 1000, N은 정수)이 첫 수로 주어지고, 이어서 N명의 점수가 주어진다. 점수는 0보다 크거나 같고, 100보다 작거나 같은 정수이다. # 출력 # 각 케이스마다 한 줄씩 평균을 넘는 학생들의 비율을 반올림하여 소수점 셋째 자리까지 출력한다. # 예제 입력 1 # 5 # 5 50 50 70 80 100 # 7 100 95 90 80 70 60 50 # 3 70 90 80 # 3 70 90 81 # 9 100 99 98 97 96 95 94 93 91 .. 2021. 3. 8.
[알고리즘] DFS와 BFS (깊이 우선탐색과 너비 우선탐색) DFS (깊이 우선탐색) 그래프에서 깊은 부분을 우선적으로 탐색하는 알고리즘 스택 자료구조( or 재귀함수)를 이용한다 탐색 시작 노드를 스택에 삽입하고 방문 처리를 한다. 스택의 최상단 노드에 방문하지 않은 인접한 노드가 하나라도 있으면 그 노드를 스택에 넣고 방문 처리합니다. 방문하지 않은 인접노드가 없으면 스택에서 최상단 노드를 꺼냅니다. 더이상 2번의 과정을 수행할수 없을 때까지 반복합니다. BFS (너비 우선 탐색) 그래프에서 가까운 노드부터 우선적으로 탐색하는 알고리즘 큐 자료구조를 이용한다. 탐색 시작노드를 큐에 삽입하고 방문처리를 합니다. 큐에서 노드를 꺼낸 뒤에 해당 노드의 인접 노드 중에서 방문하지 않은 노드를 모두 큐에 삽입하고 방문 처리를 합니다. 더 이상 2번의 과정을 수행할 수 .. 2021. 3. 7.
[알고리즘] 이진탐색 알고리즘과 파라메틱서치 이진탐색 정렬되어 있는 리스트에서 _탐색 범위를 절반씩 좁혀가며 데이터를 탐색_하는 방법 (로그시간의 시간복잡도) 이진탐색은 시작점, 끝점, 중간점을 이용하여 탐색 범위를 설정합니다 순차탐색 리스트 안에 있는 특정한 _데이터를 찾기 위해 앞에서부터 데이터를 하나씩 확인_하는 방법 단계마다 탐색 범위를 2로 나누는 것과 동일하므로 연산 횟수는 logN에 비례합니다 시간 복잡도는 _O(logN)_을 보장한다파이썬 이진 탐색 라이브러리 # 이진 탐색 소스코드 구현 (재귀 함수) def binary_search(array, target, start, end): if start > end: return None mid = (start + end) // 2 # 찾은 경우 중간점 인덱스 반환if array[mid] .. 2021. 3. 7.
반응형