class 2

a, b, v = map(int, input().split())
if (v-b) % (a-b) == 0 :
    print((v-b) // (a-b))
else :
    print(((v-b) // (a-b)) +1)

<코드 설명>

올라가는 길이인 a, 내려가는 길이인 b, 총 높이인 v를 먼저 입력받는다.

v = (a-b)*횟수+a 이므로 횟수는 (v-a)/(a-b)이다.

나머지가 0이라면 그 나머지를 출력해주고, 그 않으면 1씩 더해가며 횟수를 증가시킨다.

 

<실행 결과>

'Algorithm > BOJ' 카테고리의 다른 글

[BOJ] 1978 소수 찾기  (0) 2022.06.25
[BOJ] 1427 소트인사이드  (0) 2022.06.19
[BOJ] 10773 제로  (0) 2022.06.19
[BOJ] 1251 단어 나누기  (0) 2022.05.28
[BOJ] 4949 균형잡힌 세상  (0) 2022.05.28

class 2

class Stack:
    def __init__(self, size):
        self.top=-1
        self.stack=[]
        self.size=size

    def push(self,item):
        if self.top < (self.size-1):
            self.top += 1
            self.stack.append(item)
        else: return
        
    def pop(self):
        if self.top > -1:
            self.top -=1
            return self.stack.pop()
        else: return

n=int(input())
s=Stack(n)
sum=0
for i in range(n):
    num=int(input())
    s.push(num)
    sum+=num
    if num==0:
        s.pop()
        sum-=s.pop()
print(sum)

<코드 설명>

class Stack으로 스택을 구현하였다. 

- push : top이 self.size-1보다 작으면 top에 1을 더해주고, item을 추가해준다.

- pop : top이 -1보다 큰 경우, top을 하나 줄이고 pop을 해준다.

 

먼저 스택의 사이즈인 n을 입력받아주고, s에 Stack(n)을 저장해주었다. 그리고 구해야 할 값인 sum을 0으로 초기화 해주었다.

 

n번동안, num을 input 받고 s에 이를 push해주었다. 그리고 sum에 num을 더해주었다. 만약 num이 0이라면 0을 pop해준 후, 이전 값을 pop해주어 이를 sum에서 빼주었다.

 

그리고 이렇게 구한 sum을 출력해주었다.

 

<실행 결과>

'Algorithm > BOJ' 카테고리의 다른 글

[BOJ] 1427 소트인사이드  (0) 2022.06.19
[BOJ] 2869 달팽이는 올라가고 싶다  (0) 2022.06.19
[BOJ] 1251 단어 나누기  (0) 2022.05.28
[BOJ] 4949 균형잡힌 세상  (0) 2022.05.28
[BOJ] 9012 괄호  (0) 2022.05.28
word = input()
stack = []
for i in range(len(word)-2):
    for j in range(i+1, len(word)-1):
        for k in range(j+1, len(word)):
            t = word[:j][::-1] + word[j:k][::-1] + word[k:][::-1]
            stack.append(t)
print(min(stack))

<코드 설명>
먼저 word를 input받아주었다. 이를 세 부분으로 나누어야 한다.
나눠지는 단어의 부분이 1이상이어야하므로 첫번째 for문을 len(word)-2까지, 두번째 for문을 i+1부터 len(word)-1까지, 마지막 for문을 j+1부터 len(word)까지 검사해주도록 하였다.
변수 t에 각각 반대로 뒤집어진 결과를 합하여 저장해주었고 이를 stack에 append해주었다.
이 중 사전 순으로 가장 앞에 있는 단어를 출력해주었다.

<실행 결과>

'Algorithm > BOJ' 카테고리의 다른 글

[BOJ] 2869 달팽이는 올라가고 싶다  (0) 2022.06.19
[BOJ] 10773 제로  (0) 2022.06.19
[BOJ] 4949 균형잡힌 세상  (0) 2022.05.28
[BOJ] 9012 괄호  (0) 2022.05.28
[BOJ] 1094 막대기  (0) 2022.05.22

class 2

while True:
    br = input()
    if br == '.':
        break
    stack = []
    chk = True
    for i in br:
        if i == '(' or i == '[':
            stack.append(i)
        elif i == ')':
            if not stack or stack[-1] == '[':
                chk = False
                break
            elif stack[-1] == '(':
                stack.pop()
        elif i == ']':
            if not stack or stack[-1] == '(':
                chk = False
                break
            elif stack[-1] == '[':
                stack.pop()
    if chk == True and not stack:
        print('yes')
    else:
        print('no')

<코드 설명>
while문으로 무한반복을 시켜주고 입력받은 문자가 '.'일 때 break하도록 하였다.

입력받은 br을 하나씩 검사해준다.
-> br이 '(', '['이면 stack에 추가해준다. br이 ')'이면 stack이 없거나 stack에 마지막'['일 때 짝이 맞지 않기 때문에 chk를 False로 변경해준다. stack의 마지막이 '('이였다면 짝이 맞으므로 pop해준다.
-> br이 ']'이면 stack이 없거나 stack에 마지막'('일 때 짝이 맞지 않기 때문에 chk를 False로 변경해준다. stack의 마지막이 '['이였다면 짝이 맞으므로 pop해준다.

결론적으로 chk이 True였으며 stack이 모두 pop된 상태라면 yes를 출력해주고, 그렇지 않으면 no를 출력해주었다.

<실행 결과>

'Algorithm > BOJ' 카테고리의 다른 글

[BOJ] 10773 제로  (0) 2022.06.19
[BOJ] 1251 단어 나누기  (0) 2022.05.28
[BOJ] 9012 괄호  (0) 2022.05.28
[BOJ] 1094 막대기  (0) 2022.05.22
[BOJ] 10814 나이순 정렬  (0) 2022.05.22

+ Recent posts