본문 바로가기
Problem Solving/SWEA

[ SWEA ] D3 - 3499, 5162, 1206, 5356 - python 문제풀이

by IM조이 2021. 7. 13.

3499 퍼펙트 셔플
접근법 : 규칙은 절반 나눠 번갈아가면서 출력하기때문에 for문을 절반만 돌되 짝/홀수 조건만 잘 고려해서 출력

res = []
for tc in range(int(input())):
    n = int(input())
    c = list(input().split())
    r = []
    for i in range(n//2):
        r.append(c[i])
        if n%2==0:
            r.append(c[n//2+i])
        else:
            r.append(c[n//2+i+1])
    res.append("#{} {}".format(tc+1, " ".join(r) if n%2==0 else " ".join(r+[c[n//2]])))
print("\n".join(res))

이 문제는 테스트케이스가 많아서인지 리스트에 담아 줄바꿈 join으로 푸는게 훨씬 빠름

 

5162 두가지 빵의 딜레마
접근법 : 싼 걸 많이 사자

for tc in range(int(input())):
    A,B,money = map(int, input().split())
    less, more = min(A,B),max(A,B)
    print("#{} {}".format(tc+1,((money//less + (money-money//less*less)//more))))

 

1206 View
접근법 : 왼/오른쪽 범위 나눠서 중간인 현재의 내 크기가 제일 높은때, 내 값에서 좌우중 최대를 빼주면 됨

r = []
for tc in range(10):
    n = int(input())
    h = list(map(int, input().split()))
    cnt = 0
    for i in range(2,n-2):
        if h[i-1]<h[i] and h[i+1]<h[i]:
            left = max(h[i-1],h[i-2])
            right = max(h[i+1],h[i+2])
            if h[i] == max(left,right,h[i]):
                cnt += h[i]-max(left,right)
    r.append("#{} {}".format(tc+1,cnt))
print("\n".join(r))

 

5356 의석이의 세로로 말해요
접근법 : 단어들을 리스트에 넣어 계속 출력 후 원본을 갱신해주는 작업 반복, ['','','','','']의 형태가 되면 중단

res = []
for tc in range(int(input())):
    board = [input() for _ in range(5)]
    r = ''
    while True:
        for i in range(5):
            if board[i]: # 붙일글자가 있으면
                r += board[i][0] # 붙여라
                board[i]=board[i][1:] # 붙였으면 앞으론 무시
        if board == ['','','','','']: # 더이상 붙일 글자가 없으면
            break
    res.append("#{} {}".format(tc+1,r))
print("\n".join(res)) #빠름

 

댓글