728x90
반응형

Python 문제풀이

n = int(input())
result = []

for i in range(n):
    text = input()
    left=0
    right=0

    for i in range(len(text)):
        if text[i]=='(':
            left +=1
        else:
            right +=1

        if left<right:
            break

    if left==right:
        result.append("YES")
    else:
        result.append("NO")

for i in range(len(result)):
    print(result[i])

처음에 이 문제를 푸는데 괄호의 개수가 서로 다르면 NO라고 출력하도록 해놓고 틀렸다는 것을 알게되었습니다.

'))(('의 경우는 괄호의 개수가 같아도 이상한 괄호가 되기 때문입니다.

 

그 이후에는 정말 복잡하게 문제를 꼬아서 풀고있었습니다.

 

그러다가 포기하고 싶어지던 무렵.. 다시 괄호의 개수를 사용해보자는 생각이 들었는데, 잘 보니 왼쪽 괄호'(' 가 오른쪽 괄호보다 적어지는 순간은 이상한 괄호문장이라는 것을 깨닳았습니다. 

왼쪽괄호 오른쪽 괄호 개수가 같은데 오른쪽이 더 많아지는 순간이 오는 괄호: '()())(' '(()))()(' 

 

 

그리고 괄호의 개수가 다르면 당연히.. 옳지 않은 괄호 문자열입니다.

 

이것을 활용하여 왼쪽 괄호와 오른쪽 괄호의 개수를 반복문을 통해 세면서 왼쪽 괄호보다 오른쪽 괄호가 많아지는 순간이 생기는 문자열은 반복문을 탈출시킵니다. 이때 상태는 왼쪽괄호보다 오른쪽 괄호가 하나 더 많은 상태이기 때문에 NO가 결과리스트에 추가될 것 입니다.

 

이 경우가 아니더라도 왼쪽 괄호가 오른쪽괄호의 개수보다 많은경우가 있다면 반복문을 종료한 뒤 NO가 결과리스트에 추가됩니다.

728x90
반응형
728x90
반응형

Python 문제풀이

text = input()

while len(text) != 0:
    print(text[:10])
    text = text[10:]

 

문자열을 10개씩 끊어서 출력하고 10개씩 끊어서 잘라냅니다. 반복하다보면 마지막 줄에는 다 잘려나가서 문자열이 비게되는 순간이 오는데 while문의 반복을 그때까지만 유지해주면 됩니다.

728x90
반응형
728x90
반응형

Python 문제풀이

a=[]

for i in range(20):
    a.insert(i, i+1)

for i in range(10):
    x, y = map(int, input().split())

    for j in range(x, y-((y-x)//2)):
        a[j-1], a[y-j+x-1] = a[y-j+x-1] , a[j-1]

for i in range(20):
    print(a[i])

 

 

이 문제는 풀면서 헷갈려서 종이에 끄적거리면서 풀었습니다. 그냥 암산을 잘 못해서 그런 것 같습니다.

 

배열에 1~20의 수를 집어넣고 하라는대로 5 10 이라고 주어졌다면 배열 입장에서4부터 9를 역순으로 뒤집어 주면 되는 문제입니다. 그래서 4와 9의 숫자를 바꾸고 5와 8의 숫자를 바꾸고 6과 7의 숫자를 바꾸는 식으로 문제를 풀었습니다.

 

5,6,7 등의 가운데 숫자가 남는 경우에서 6같은 경우는 그대로 있어도 상관없기 때문에 range속 조건 대로 처리하여도 문제가 없습니다.

 

마지막에는 배열의 요소들을 그냥출력해주면 됩니다.

728x90
반응형
728x90
반응형

Python 문제풀이

n = int(input())

result =[]
for i in range(n):
    y = 0
    k = 0
    for j in range(9):
        a, b= map(int, input().split())
        y += a
        k += b
    if y>k:
        result.insert(i,'Yonsei')
    elif y<k:
        result.insert(i, 'Korea')
    else:
        result.insert(i, 'Draw')

for i in range(n):
    print(result[i])

해당 야구 문제는 조금.. 문제가 있는 것 같습니다. 뭐랄까 테스트 예시가 별로 없는 느낌이 듭니다. 사실 연세대학교가 이기는 경우만 대충 채점하고 넘어가는 느낌이 들기 때문에.. 시도는 안해봤지만 저렇게까지 코드를 짜지 않아도 풀릴 것 같습니다.

 

일단 문제 대로 한 테스트당 9개의 기록이 들어있고 그걸 다 합해서 게임을 승리한 쪽의 이름을 출력하고, 동점이라면 Draw를 출력하는 문제입니다. 문제대로 하긴 했는데 약간 현타가 오는 문제였습니다.

728x90
반응형
728x90
반응형

Python 문제풀이

x = input()
y = input()

if len(x) >= len(y):
    print('go')
else:
    print('no')

솔직히 너무 간단한 문제입니다. 문제가 귀여워 보여서 풀긴 풀었는데 너무 간단해서.. 설명할 것이 별로 없는 것 같습니다.

 

두개의 문자열을 입력받고 내가 낼 수 있는 'aaah'가 같거나 길다면 go를, 아니라면 no를 출력하면 됩니다. 사실 aaah의 의미가 없는 것이 그냥 문자열의 길이만 따지면 됩니다. 그래서 len(x) 등을 사용하였습니다.

728x90
반응형
728x90
반응형

Python 문제풀이

n = int(input())

a = list(map(int, input().split()))
b = []
min = -1 #오르막길의 시작지점을 저장할 변수

if n==1:
    print(0)

for i in range(n-1):
    if i==0 and a[i]<a[i+1]: #처음이 오르막길의 시작일 경우
        min = a[i]
    elif i>0 and a[i]<a[i+1] and a[i]<=a[i-1] and min== -1: #처음이 아닌 오르막길의 시작일 경우
        min = a[i]
    elif i>0 and a[i]>a[i-1] and a[i]>=a[i+1] and min!= -1: #오르막길이 끝난 경우
        b += [a[i]-min]
        min = -1
    elif i == n-2 and a[i]>a[i-1] and min != -1 and a[i]<=a[i+1]: #끝나가는 부분이 오르막길로 끝나는 경우
        b += [a[i+1] - min]

if b == []:
    print(0)
    exit
else:
    result = b[0]
    for i in range(len(b)):
        if result < b[i]:
            result = b[i]

    print(result)

조건을 많이 달아서 코드가 조금 지저분합니다.. 주석으로 조건의 설명을 적어놨지만 저도 다시보니 복잡하네요.

 

min은 오르막길이 시작하는 경우 그 시작지점을 저장해두는 변수이고, 오르막길에 끝날 경우 min에 -1을 넣어 오르막길이 끝났다는 것을 나타내기 위해 사용합니다.

 

오르막길이 끝났을 경우 (끝난 지점 - min)을 해주면 오르막길의 높이를 알 수 있습니다. 해당 높이를 리스트에 차곡차곡 저장하고 마지막에 오르막길의 높이들이 저장된 리스트에서 최대값을 구하여 출력하면 됩니다.

728x90
반응형

+ Recent posts