[BOJ 1654: 랜선 자르기] 문제 바로가기 ❓문제 설명❗️문제 풀이이분탐색을 이용하여 풀었다.[1, 최대 랜선 길이]를 start, end값으로 시작해 중간값(mid)을 구했다.이 후, 해당 중간값으로 구할 수 있는 랜선의 개수를 N과 비교해 start, end 값을 각각 조절했다.if lan_num >= N: start = mid + 1else: # lan_num 해당 풀이 전, _최댓값_이라는 단어에 집중하여 랜선의 개수가 N과 같을 때lan_num == N 을 조건문에 추가하여 새로운 리스트에 mid를 추가하고,이 중 최댓값을 출력하는 방법을 이용했다. if lan_num > N: start = mid + 1 elif lan_num == N: lis..
코딩테스트
BOJ 12904: A와 B❓문제 설명A와 B로만 이루어진 두 문자열 S, T를 입력 받고1. 문자열 뒤에 A 추가2. 문자열을 뒤집고, 뒤에 B 추가두 가지 규칙으로 S 문자열을 T로 변경할 수 있는지 여부(1, 0)를 판단하는 문제이다. ❗️문제 풀이S -> T 과정에는 특정 전제 조건 없이 A추가 / 뒤집은 후 B 추가를 진행해야 한다.반대로 T -> S 로 과정을 전환하면마지막 문자에 따라 A 제거 / B 제거 후 뒤집기로 if문을 사용하기 적합해진다.결과적으로, 제시된 과정을 반대로 수행해 답을 구했다.A 추가 => A 제거뒤집은 후 B 추가 => B 제거 후 뒤집기def reverse(str): return str[::-1]def AB(S, T): while len(T) > len(..
BOJ 13305: 주유소 ❓문제 설명n개의 지역을 일렬로 지나는데 필요한 가장 최소의 기름값을 구하는 문제이다.지역 간 거리와 각 지역에서의 기름값이 각각 리스트로 주어진다.시작 시점엔 기름이 존재하지 않고,기름은 무제한으로 담긴다 가정하에가장 최소의 비용을 써서 마지막 지역까지 도달하면 된다.❗️문제 풀이시작 시점엔 기름이 있지 않기 때문에, 두 번째 지역으로 가기 위한 최소한의 기름을 넣어야 한다.더불어, 주어진 리스트를 정렬하면 안되기에 최소 거리당 주유 금액을 저장하는 변수를 설정했다.import sysN = int(sys.stdin.readline())length_list = list(map(int, sys.stdin.readline().split()))price_list = list(map(..
BOJ 1406: 에디터 1406번: 에디터첫째 줄에는 초기에 편집기에 입력되어 있는 문자열이 주어진다. 이 문자열은 길이가 N이고, 영어 소문자로만 이루어져 있으며, 길이는 100,000을 넘지 않는다. 둘째 줄에는 입력할 명령어의 개수www.acmicpc.net❓문제 설명vim, 메모장 에디터를 구현하는 문제이다.일련의 문자열이 주어지고, 명령어에 따라 커서를 옮기거나, 문자를 추가 혹은 삭제할 수 있다.명령어 'L' -> 왼쪽으로 커서 옮김명령어 'D' -> 오른쪽으로 커서 옮김명령어 'B' -> 커서 왼쪽의 문자 삭제명령어 'P $' -> 커서 왼쪽에 문자 $ 삽입 ❗️문제 풀이"ABCD" 라는 문자열이 주어지면 커서는"_A_B_C_D_" => 이런 식으로 5개의 자리에 위치할 수 있다.따라서, ..
BOJ 9009 : 피보나치 9009번: 피보나치입력 데이터는 표준입력을 사용한다. 입력은 T 개의 테스트 데이터로 구성된다. 입력의 첫 번째 줄에는 테스트 데이터의 수를 나타내는 정수 T 가 주어진다. 각 테스트 데이터에는 하나의 정수 nwww.acmicpc.net❓문제 설명✨제켄도르프의 정리 (Zeckendorf's Theorem)모든 양의 정수는 피보나치 수의 유일한 합의 표현으로 나타낼 수 있다.이때 최소 개수로 나타낼 경우, 피보나치 수는 연속적으로 나타나지 않는다.❗️문제 풀이이 이론에 착안하여 코드를 작성하였고 아래는 시행착오이다.import sysT = int(sys.stdin.readline())fibo = [0, 1]answer = [[]for i in range(T)]for i in ..
BOJ 11866 : 요세푸스 문제 0 바로가기 11866번: 요세푸스 문제 0첫째 줄에 N과 K가 빈 칸을 사이에 두고 순서대로 주어진다. (1 ≤ K ≤ N ≤ 1,000)www.acmicpc.net ❓문제 설명 문제 이해가 조금 어려웠는데, 쉽게 풀면첫 번째 제거되는 사람은 1번을 기준으로 3번이 K번째이므로 3번이 제거된다.두 번째 제거되는 사람은 4번을 기준으로 시작하여 K번째인 6번이 제거된다.세 번째 제거되는 사람은 다시 7번을 기준으로 시작하여 K번째인 2번이 제거된다. ❗️문제 풀이양방향 큐인 deque 자료구조를 이용했다. deque의 rotate 함수는 원순열을 돌리는 함수이다.deque.rotate(양수) 는 시계 방향으로, deque.rotate(음수)는 반시계 방향으로 회전한..