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

class 2

n=int(input())
for _ in range(n):
    sum=0
    br=list(input())
    for i in br:
        if i=='(': sum += 1
        elif i==')' : sum -=1
        if sum<0:
            print("NO")
            break
    if sum>0 : print("NO")
    elif sum==0 : print("YES")

<코드 설명>
입력 받을 개수인 n을 먼저 입력받는다.
n번 for문을 반복해준다. 이 안에서 br라는 list를 입력받고, for문을 이용해 br의 문자 하나하나씩 검사하기로 하였다. (이면 sum에 1을 더해주었고, )이면 sum을 1 빼주어 만약 이미 0보다 작으면 괄호가 맞지 않으므로 NO를 출력한 후 break를 해주었다. sum이 0보다 클 경우, 이 또한 맞지 않는 경우이므로 NO를 출력해주었고, 0일 때에만 YES를 출력하도록 하였다.

<실행 결과>

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

[BOJ] 1251 단어 나누기  (0) 2022.05.28
[BOJ] 4949 균형잡힌 세상  (0) 2022.05.28
[BOJ] 1094 막대기  (0) 2022.05.22
[BOJ] 10814 나이순 정렬  (0) 2022.05.22
[BOJ] 1920 수 찾기  (0) 2022.05.22

n=int(input())
stick=64
cnt=0
while n>0:
    if stick>n:
        stick//=2
    else:
        cnt+=1
        n-=stick
print(cnt)

<코드 설명>

먼저 막대 길이 n을 입력 받아주었다. 최장 길이인 64를 stick 변수에 저장해주었다.

stick이 n보다 크면 stick을 절반으로 줄인다. 그렇지 않으면 cnt를 1 늘려주고, n에서 stick만큼의 길이를 빼준다.

이렇게 구한 cnt값을 출력해준다.

 

<실행 결과>

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

[BOJ] 4949 균형잡힌 세상  (0) 2022.05.28
[BOJ] 9012 괄호  (0) 2022.05.28
[BOJ] 10814 나이순 정렬  (0) 2022.05.22
[BOJ] 1920 수 찾기  (0) 2022.05.22
[BOJ] 1850 최대공약수  (0) 2022.05.15

+ Recent posts