CodingTest 56

특정 문자열을 포함한 시각구하기

1. 문제 설명 2. 문제 조건 3. 문제 해결 아이디어 모든 시각의 경우를 하나씩 세야한다. 하루는 86,400초이므로 모든 경우의 수는 86,400가지이다. 1씩 시각을 증가시키면서 3이 하나라도 포함되어 있었는지를 확인한다. 4. 표준 답안 H = int(input()) count = 0 for hour in range(H+1): for minute in range(60): for seconds in range(60): if '3' in str(hour) + str(minute) + str(seconds): count += 1 print(count) 시, 분, 초를 문자열로 만들어서 붙이게 되면 연산이 안되고 하나의 문자열이 된다. 거기서 3이 포함되어있는지 확인하는 방식으로 접근했다.

상하좌우 여행가

1. 문제 설명 2. 문제 조건 3. 문제 해결 아이디어 요구사항대로 충실히 구현 시물레이션 유형으로 구현이 중요한 문제 4. 풀이 N = int(input()) position = list(map(str,input().split())) #현재 서 있는 위치 x, y = 1, 1 #동, 북, 서, 남 dx = [0, -1, 0 ,1] dy = [1, 0, -1, 0] for i in position: if((i == 'L') & (y-1 > 0)):#왼쪽으로 이동 x += dx[2] y += dy[2] if((i == 'R') & (y+1 0)):#위로 이동 x += dx[1] y += dy[1] if((i == 'D') & (x+1 n or ny > n: continue x, y = nx, ny pri..

구현 이론

구현(Implementation)이란 머릿속에 있는 알고리즘을 소스코드로 바꾸는 과정. 구현 유형의 예시는? 알고리즘은 간단한데 코드가 지나칠 만큼 길어지는 문제 실수 연산을 다루고, 특정 소수점자리까지 출력해야 하는 문제 (Iterator) 문자열을 특정한 기준에 따라서 끊어 처리해야 하는 문제 적절한 라이브러리를 찾아서 사용해야 하는 문제 1. 일반적으로 알고리즘 문제에서의 2차원 공간은 행렬(Matrix)의 의미로 사용된다. 행렬이란 2차원 배열에 표현하는 것 (파이썬은 리스트) 2. 시물레이션 및 완전 탐색 문제에서는 2차원 공간에서의 방향 벡터가 자주 활용된다. 특정위치에서 시작해서 좌/우/상/하로 움직여 문제를 해결하는 것이 많다. dx[0], dy[0]은 x좌표는 그대로 y좌표만 1증가시키므..

모험가 길드

1. 문제설명 2. 문제 조건 3. 문제해결 아이디어 오름차순 정렬 이후에 공포도가 가장 낮은 모험가부터 하나씩 확인한다. 공포도를 하나씩 확인하며 "현재 그룹에 포함된 모험가의 수"가 "현재 확인하고 있는 공포도보다 크거나 같다면 이를 그룹으로 설정" 4. 답안 #모험가의 수 n = int(input()) promulgate = list(map(int, input().split())) answer = 0 people = 1 #올림차순 정렬 promulgate = sorted(promulgate) for i in range(n): if(promulgate[i] = i: #현재 그룹에 포함된 모험가의 수가 현재의 공포도 이상일 때 result += 1 count = 0 print(result)

곱하기 혹은 더하기

1. 문제 설명 2. 문제 해결 아이디어 대부분의 경우 '+'보다는 'x'가 값을 크게 만든다. 다만 두 수중에서 하나라도 0, 1일경우 곱하기 보다는 더하기를 수행하는 것이 효율적이다. 즉, 하나라도 1 이하인 경우에는 더하며 두 수가 모두 2이상인 경우에는 곱해야한다. 3. 답안 각각 분리해서 계산해야 하므로 문자열로 받는 것이 좋겠다. 앞뒤를 비교해서 앞뒤합이 4이하일 경우 더한다. 맨 앞 인덱스의 수를 잡고 계속 연산해나간다. data = input() result = int(data[0]) for i in range(len(data) - 1): if(int(data[i]) + int(data[i+1])

1이 될 때까지 반복적으로 수행

1. 문제 설명 2. 문제 해결 아이디어 주어진 N에 대하여 최대한 많이 나누기를 수행 N의 값을 줄일 때 2이상의 수로 나누는 작업이 1을 빼는 작업보다 수를 훨씬 많이 줄일 수 있다. N = 25, k = 3일경우 3. 정당성 분석 N이 아무리 큰 수여도, k로 계속 나눈다면 기하급수적으로 빠르게 줄일 수 있다. 항상 1에 도달하게 된다. (최적의 해 성립) 4. 코드 #N, K을 공백으로 기준으로 구분하여 입력 N, K = map(int,input().split()) result = 0 while True: target = (N // K) * K result += (N - target) N = target #더이상 나누어 떨어지지 않으면 if N < K: break result += 1 N //= ..

그리디 알고리즘 이론

그리디 알고리즘(탐욕법) 현재 상황에서 지금 당장 좋은 것만 고르는 방법 일반적인 그리디 알고리즘은 문제를 풀기 위한 최소한의 아이디어를 떠올릴 수 있는 능력을 요구 최적의 해를 구하기 예제) 그리디 알고리즘은 이처럼 매 상황에서 최고의 상황만 선택한다. 일반적인 상황에서 최적의 해를 보장할 수 없다. 코딩테스트의 경우 이처럼 그리디 알고리즘으로 푸는 것이 최적의 해가 나오도록 설계되어 있다. 정당성 분석을 진행한다. 문제1 : 거스름 돈 문제1 : 1. 문제 해결 아이디어 최적의 해를 빠르게 구하기 위해서는 가장 큰 화폐 단위부터 돈을 거슬러 준다. N원을 거슬러 줘야 할 때, 가장 먼거 500원으로 거슬러 줄 수 있을 만큼 거슬러 준다. 이후에 100원, 50원, 10원짜리 동전을 차례대로 거슬러 준..

표준 라이브러리(순열, 조합)

함수 기능 내장 함수 기본 입출력, 정렬함수 등을 제공 itertools 반복되는 형태의 데이터를 처리하기 위한 유용한 기능들을 제공 ex) 순열, 조합 heapq 힙 자료구조를 제공 ex) 우선순위 큐 bisect 이진 탐색(Binary Search) 기능을 제공 collections 덱(deque), 카운터(Counter)등의 자료구조 math 필수적인 수학적인 기능 제공 ex) 팩토리얼, 제곱근, 최대공약수(GCD), 삼각함수, 파이(PI) #sum() result = sum([1,2,3,4,5]) #min(), max() result = min(7,3,5,2) result = max(7,3,5,2) #eval() result = eval("(3+5)*7") #sorted() result = sor..