728x90
반응형
Chapter 01. 기본 자료구조(기초 문제풀이)
혼자 힘으로 풀어보기
음계: https://www.acmicpc.net/problem/2920
문제 제목: 음계
문제 난이도: 하(easy)
문제 유형: 배열, 구현
추천 풀이 시간: 15분
문제풀이 핵심 아이디어
- 리스트에서의 원소를 차례대로 비교합니다.
- 비교할 때 두 원소를 기준으로 오름차순/내림차순 여부를 체크합니다.
[초기상태 오름차순: True, 내림차순: True]
[초기상태 오름차순: True, 내림차순: False]
[초기상태 오름차순: False, 내림차순: False]
- 오름차순 및 내림차순이 모두 False이므로 'mixed'를 출력합니다.
소스 코드
a = list(map(int, input().split(' ')))
ascending = True
descending = True
for i in range(1, 8):
if a[i] > a[i-1]:
descending = False
elif a[i] < a[i-1]:
ascending = False
if ascending:
print('ascending')
elif descending:
print('ascending')
else:
prinf('mixed')
혼자 힘으로 풀어보기
블랙잭: https://www.acmicpc.net/problem/2798
문제 제목: 블랙잭
문제 난이도: 하(easy)
문제 유형: 배열, 완전 탐색
추천 풀이 시간: 20분
문제 풀이 핵심 아이디어
- 카드 중 3개씩 뽑는 모든 경우의수는 C(n,3)이며, n은 최대 100입니다.
- 따라서 단순히 3중 반복분으로 모든 경우의 수를 확인하여 문제를 해결할 수 있습니다.
소스 코드
n, m = list(map(int, input().split(' ')))
data = list(map(int, input().split(' ')))
result = 0
length = len(data)
count = 0
for i in range(0, length):
for j in range(i+1, length):
for K in range(j+1, length):
sum_value = data[i] + data[j] + data[k]
if sum_value <= m:
result = max(result, sum_value)
print(result)
기본 자료구조 (핵심 유형 문제풀이)
혼자 힘으로 풀어보기
스택 수열: https://www.acmicpc.net/problem/1874
문제 제목: 스택 수열
문제 난이도: 하(Easy)
문제 유형: 스택, 그리디
추천 풀이 시간: 30분
문제 풀이 핵심 아이디어
- 스택에 원소를 삽입할 때는, 단순히 특정 수에 도달할 때까지 삽입하면 됩니다.
- 스택에서 원소를 연달아 빼낼 때 내림차순을 유지할 수 있는지 확인합니다.
소스 코드
n = int(input())
count = 1
stack = []
result = []
for i in range(1, n+1):
data = int(input())
while count <= data:
stack.append(count)
count += 1
result.append('+')
if stack[-1] == data:
stack.pop()
result.appent('-')
else:
print('NO')
exit(0)
print('\n'.join(result))
혼자 힘으로 풀어보기
프린터 큐: https://www.acmicpc.net/problem/1966
문제 제목: 프린터 큐
문제 난이도: 하(Easy)
문제 유형: 큐, 구현, 그리디
추천 풀이 시간: 25분
문제 풀이 핵심 아이디어
- 데이터의 개수(N<=100)가 많지 않으므로, 단순히 문제에서 요구하는 대로 구현합니다.
- 현재 리스트에서 가장 큰 수가 앞에 올 때까지 회전시킨 뒤에 추출합니다.
- 가장 큰 수가 문서 M에 해당하면서 가장 앞에 있을 때 프로그램을 종료합니다.
소스 코드
test_case = int(input())
for _ in range(test_case):
n, m = list(map(int, input().split(' ')))
queue = list(map(int, input().split(' ')))
queur = [(i, idx) for idx, i in enumerate(queue)]
count = 0
while True:
if queue[0][0] == max(queue, key=lambda x: x[0][0]:
count += 1
if queue[0][1] == m:
print(count)
break
else:
queue.pop(0)
else:
queue.append(queue.pop(0))
혼자 힘으로 풀어보기
키로거: https://www.acmicpc.net/problem/5397
문제 제목: 키로거
문제 난이도: 중(Medium)
문제 유형: 스택, 구현, 그리디
추천 풀이 시간: 40분
문제 풀이 핵심 아이디어
- 문자열 크기가 최대 1,000,000이므로 시뮬레이션 방식으로는 문제를 해결할 수 없습니다.
- 스택을 활용하여 선형시간 문제를 해결할 수 있는 알고리즘을 설계합니다.
1) 스택 두 개를 만들고, 스택 두 개의 중간 지점을 커서(Cursor)로 간주합니다.
2) 문자 입력: 왼쪽 스택에 원소를 삽입합니다.
3) - 입력: 왼쪽 스택에서 원소를 삭제합니다.
4) < 입력: 왼쪽 스택에서 오른쪽 스택으로 원소를 이동합니다.
5) > 입력: 오른쪽 스택에서 왼쪽 스택으로 원소를 이동합니다.
소스 코드
test_case = int(input())
for _ in range(test_case):
left_stack = []
right_stack = []
data = input()
for i in data:
if i == '-':
if left_stack:
left_stack.pop()
elif i == '<':
if left_stack:
right_stack.append(left_stack.pop())
elif i == '>':
if right_stack:
left_stack.append(right_stack.pop())
else:
left_stack.append(i)
left_stack.extend(reversed(right_stack))
print(''.join(left_stack))
728x90
반응형
'Algorithm > 유형별 문제 풀이' 카테고리의 다른 글
Chapter 06. 기본 탐색 알고리즘 (0) | 2020.08.10 |
---|---|
Chapter 05. 고급 정렬 알고리즘 (0) | 2020.08.10 |
Chapter 04. 재귀 호출 (0) | 2020.08.10 |
Chapter 03. 기본 정렬 알고리즘 (0) | 2020.08.10 |
Chapter 02. 고급 자료구조 (0) | 2020.08.10 |