정화 코딩
매일 문제 풀기 - 8월 넷째 주 본문
8/21. 벌집 (백준 2292번)
https://www.acmicpc.net/problem/2292
#python
n = int(input())
count = 1
num = 1
while n > num :
num += count * 6
count += 1
print(count)
헷갈려서 이런 식으로 그려가면서 규칙을 찾았다. 각 줄에서 최대인 수는 1, 7, 19, 37, 61인데, 공차가 6, 12, 18 이런 식으로 6의 배수였다. (정답)
8/21. 괄호 (백준 9012번)
https://www.acmicpc.net/problem/9012
#python
import sys
num = int(sys.stdin.readline())
count = 0
while count < num :
data = sys.stdin.readline().strip()
stack = []
isValid = True
for i in range (0, len(data)) :
if data[i] == '(' :
stack.append('a')
elif data[i] == ')' :
if len(stack) == 0 :
isValid = False
break
else :
del stack[len(stack)-1]
if not isValid :
print("NO")
elif len(stack) == 0 :
print("YES")
else :
print("NO")
count += 1
스택 문제인 듯 하다. 나는 스택이라는 클래스를 따로 만들지 않고 그냥 리스트를 스택처럼 사용해봤다. '('가 들어오면 스택에 a를 넣고 ')'가 들어오면 스택에 있는 a를 지우고... 이런 식으로. (정답)
8/23. 좌표 정렬하기 (백준 11650번)
https://www.acmicpc.net/problem/11650
#python
import sys
n = int(sys.stdin.readline())
data = []
for i in range (0, n) :
a, b = map(int, sys.stdin.readline().split())
data.append([a, b])
data.sort()
for i in range (0, n) :
print(data[i][0], data[i][1])
2차원 리스트에 값들을 넣고 정렬만 해주면 되는 문제이다. 파이썬 내장 함수 sort를 2차원 리스트에 쓰면 기본으로 0번째 인덱스를 오름차순 정렬해주고 같은 값의 경우 오름차순으로 재정렬을 시켜준다. 고로 이 문제에서는 sort를 그대로 사용하면 된다. 내림차순으로 정렬해야 하는 경우에는 reverse=True를 사용하면 되고 정렬기준을 다르게 하려면 key를 활용하면 된다. (정답) 이로써 class 2 달성과 동시에 실버2로 승급!!
8/24. 스택 (백준 10828번)
https://www.acmicpc.net/problem/10828
#python
import sys
class Stack :
def __init__(self) :
self.items = []
def push(self, item) :
self.items.append(item)
def pop(self) :
if not self.isEmpty() :
return self.items.pop()
else :
return -1
def peek(self) :
if not self.isEmpty() :
return self.items[-1]
else :
return -1
def isEmpty(self) :
return not self.items
def size(self) :
return len(self.items)
def clear(self) :
self.items = []
stk = Stack()
n = int(sys.stdin.readline())
count = 0
for i in range(0, n) :
commend = sys.stdin.readline().split()
if commend[0] == "push" :
stk.push(commend[1])
elif commend[0] == "pop" :
print(stk.pop())
elif commend[0] == "size" :
print(stk.size())
elif commend[0] == "empty" :
if stk.isEmpty() :
print(1)
else :
print(0)
elif commend[0] == "top" :
print(stk.peek())
count += 1
내가 따로 티스토리 글로 올린 <파이썬으로 스택 구현>에 있는 코드를 조금 수정해서 문제를 풀었다. 참고! 문자열.split()은 문자열을 띄어쓰기, 엔터로 구분하여 나누게 된다. 그러니 마지막에 입력되는 엔터로 없어지기 때문에 편하다!! (정답)
8/25. 큐 (백준 10845번)
https://www.acmicpc.net/problem/10845
#python
import sys
class Queue :
def __init__(self) :
self.items = []
def push(self, item) :
self.items.append(item)
def pop(self) :
if not self.isEmpty() :
object = self.items[0]
self.items = self.items[1:]
return object
else :
return -1
def front(self) :
if not self.isEmpty() :
return self.items[0]
else :
return -1
def back(self) :
if not self.isEmpty() :
return self.items[-1]
else :
return -1
def isEmpty(self) :
return not self.items
def size(self) :
return len(self.items)
def clear(self) :
self.items = []
que = Queue()
n = int(sys.stdin.readline())
count = 0
for i in range(0, n) :
commend = sys.stdin.readline().split()
if commend[0] == "push" :
que.push(commend[1])
elif commend[0] == "pop" :
print(que.pop())
elif commend[0] == "size" :
print(que.size())
elif commend[0] == "empty" :
if que.isEmpty() :
print(1)
else :
print(0)
elif commend[0] == "front" :
print(que.front())
elif commend[0] == "back" :
print(que.back())
count += 1
파이썬에 큐 라이브러리가 있다고 해서 리스트 말고 그걸 활용해보려고 했는데 (그게 더 효율적이라고 한다. 리스트로 구현하려면 pop 할 때 리스트 전체를 옮겨야 하니...) 뜻대로 되지 않아... 포기... 더 성장하고 다시 도전해봐야 겠다. 암튼 스택처럼 리스트로 큐 클래스를 구현해서 풀었다. (정답)
'PS' 카테고리의 다른 글
EDOC 코딩테스트 예비소집 (0) | 2023.09.02 |
---|---|
매일 문제 풀기 - 8월 다섯째 주 (0) | 2023.08.29 |
매일 문제 풀기 - 8월 셋째 주 (0) | 2023.08.15 |
매일 문제 풀기 - 8월 둘째 주 (0) | 2023.08.07 |
매일 문제 풀기 - 8월 첫째 주 (0) | 2023.08.01 |