문제 10799번: 쇠막대기 여러 개의 쇠막대기를 레이저로 절단하려고 한다. 효율적인 작업을 위해서 쇠막대기를 아래에서 위로 겹쳐 놓고, 레이저를 위에서 수직으로 발사하여 쇠막대기들을 자른다. 쇠막대기와 레이저� www.acmicpc.net 문제 풀이 ( ) 연속적으로 괄호가 등장하면 해당 위치는 레이저이다. 따라서 다른 괄호 들과 구분히 되게 ( )를 다른 문자로 치환한다면 문제에 접근하기가 조금 쉬워 진다. 만약 ( )를 ★로 치환하게 된다면 ★(((★★)(★)★))(★) 와 같이 치환되게 된다. 문제는 다음과 같이 풀 수 있다. 여는 괄호인 '('가 입력되면 stack에 `push`하고 닫는 괄호인 ')'가 입력되면 `pop`을 한다. 현재 값이 여는 괄호 '('라면, 막대기의 수를 1 증가 시킨다..
문제 17413번: 단어 뒤집기 2 문자열 S가 주어졌을 때, 이 문자열에서 단어만 뒤집으려고 한다. 먼저, 문자열 S는 아래와과 같은 규칙을 지킨다. 알파벳 소문자('a'-'z'), 숫자('0'-'9'), 공백(' '), 특수 문자('')로만 이루어져 � www.acmicpc.net 문제 풀이 9039 단어 뒤집기는 단순히 뒤집기만 하면 되므로 심플 그자체이다. 하지만 단어 뒤집기 2는 의 사이에 있는 태그 문자의 경우 반전을 하지 않으며 나머지는 반전을 하여야 한다. 문제는 다음과 같이 접근할 수 있다. reverse 플래그를 통해 반전 여부를 판단한다. '' 가 입력되면 반전이 필요할 수도 있으므로 reverse = True로 설정한다. reverse의 초기값은 True로 설정하여 '
문제 17299번: 오등큰수 첫째 줄에 수열 A의 크기 N (1 ≤ N ≤ 1,000,000)이 주어진다. 둘째에 수열 A의 원소 A1, A2, ..., AN (1 ≤ Ai ≤ 1,000,000)이 주어진다. www.acmicpc.net 문제 풀이 바로 앞 번 문제인 17298 오큰수를 이해하였다면 쉽게 풀 수 있는 문제이다. 앞의 문제는 단순히 수열의 값을 비교하여 큰 값이 있는지 확인하는 문제였지만, 이 문제는 각 수열과 중복되는 값을 카운트하여 카운트 되는 값보다 큰 값이 있는지 확인하는 문제이다.😉 코드 from sys import stdin from collections import Counter if __name__ == "__main__": stack = [] n = int(stdin.rea..
문제 17298번: 오큰수 첫째 줄에 수열 A의 크기 N (1 ≤ N ≤ 1,000,000)이 주어진다. 둘째에 수열 A의 원소 A1, A2, ..., AN (1 ≤ Ai ≤ 1,000,000)이 주어진다. www.acmicpc.net 문제 풀이 3 5 2 7의 수열이 주어지면, 한 원소를 기준으로 오른쪽에 큰 값이 있으면 최초의 큰 값을 기록하여 반환하는 문제이다. 만약 큰 값을 찾을 수 없다면 -1을 반환한다. 이 문제는 다른 stack의 문제와 달리 수열의 값을 stack에 넣는 것이 아닌, 각 인덱스를 통해 문제를 해결하는 방식으로 접근하면 쉽게 풀 수 있다. 또한, 파이썬으로 문제를 풀기 위해서는 각 처리마다 list를 append 할 경우 시간 초과가 발생하므로, 미리 list를 초기화해두고 ..
하드 디스크는 그림 1과 같은 구조로 구성되어 있다. 디스크 Access Time은 Seek time + Rotational delay + Transfer time으로 계산할 수 있다. 따라서 하드 디스크의 회전하는 특성을 고려하여 요청된 작업을 효율적으로 처리한다면, 작업 처리 시간을 감소 시킬 수 있을 것이다. 디스크 스케줄링 알고리즘 FCFS (First-Come First-Served) : 가장 먼저 요청된 작업을 먼저 처리하는 방식 SSTF (Shortest Seek Time First) : 요청된 작업 중 헤드의 움직임이 가장 짧게 움직이는 작업 부터 처리하는 방식 SCAN : 엘레베이터 처럼 한방향으로 탐색을 하고, 다시 다른 방향으로 탐색을 하는 방식 C-SCAN : SCAN 알고리즘에서 ..
가상 메모리를 효율적으로 관리하기 위해서는 프레임 할당을 어떻게 하느냐가 중요하다. 이에 프레임 할당 시 중요되는 관점은 다음과 같다. 최소 프레임 수 : 프로세스에 최소한으로 할당되는 프로임 수는 시스템에 따라 결정되며, 잘못된 최소 프레임 수는 좋지 않는 성능을 야기한다. 할당 정책 균등 할당 : 모든 프로세스가 균등하게 프레임을 할당 받는다. 비례적 할당 : 우선순위에 비례하여 프레임을 할당한다. Global, Local Allocation Global Allocation : 모든 프로세스가 페이지 교체의 대상이 될 수 있다. Local Allocation : 특정 프로세스 페이지에 대해서만 교체 디상으로 선정 한다. 쓰레싱 이전의 내용들을 보면, 메모리의 부족으로 가상 메모리를 사용하게 되어, p..
문제 1158번: 요세푸스 문제 첫째 줄에 N과 K가 빈 칸을 사이에 두고 순서대로 주어진다. (1 ≤ K ≤ N ≤ 5,000) www.acmicpc.net 문제 풀이 해당 문제를 보고 처음에 드는 생각은 원형 큐 문제인가? 생각이 들었다. 하지만 순회하면서 pop을 하고자 하는 index에 위치하는 값을 제거하는 것은 다소 비효율적이다. from collections import deque def solution(k, n): mans = deque([num + 1 for num in range(k)]) answer = [] cnt = n while mans: if cnt: mans.append(mans.popleft()) cnt -= 1 else: answer.append(str(mans.poplef..
문제 1874번: 스택 수열 1부터 n까지에 수에 대해 차례로 [push, push, push, push, pop, pop, push, push, pop, push, push, pop, pop, pop, pop, pop] 연산을 수행하면 수열 [4, 3, 6, 8, 7, 5, 2, 1]을 얻을 수 있다. www.acmicpc.net 문제 풀이 이 문제는 문제가 어려운게 아니라 처음에 문제를 접했을 때... 롸....? 이게 먼소리... 😣 라고 생각이 들었다. 문제를 찬찬히 읽으니 이건가? 하고 이해했다. 예제 입력 4, 3, 6, 8, 7 ,5, 2, 1이 주어지면 stack에 1 - n까지의 수를 어떻게 push, pop하여서 저러한 순열을 만들 수 있는가를 묻는 문제이다. 순열의 처음이 4, 3이 ..