본문 바로가기
Problem Solving/SWEA

[ SWEA ] D2 - 1859, 1926, 2007, 2005 - python 문제풀이

by IM조이 2021. 6. 24.

1859 백만장자프로젝트
문제를 먼저 잘 이해하고 생각한 뒤 풀면 생각보다 쉽게 풀리는 문제

 

Idea 1. 일단, 최대의 이익을 내려면 계속 사다가 가장 비싸게 팔 수 있는 시점에 팔아야 한다.

Idea 2. 배열을 뒤에서 부터 순회하면서, 특정 시점에서 얼마에 파는게 가장 최대일지 구하면 된다

- 제일 마지막 순간에 팔 수 있는 가격을 초기값으로 설정
- 뒤에서부터 오면서, 더 비싸게 팔 수 있는 순간이 올 경우(t2) 최대값으로 가격을 갱신해주기
- 더 비싸게 팔 수 있는 순간이 아니라면, 사는게 무조건 이득임

for tc in range(int(input())):
    N = int(input())
    data = list(map(int, input().split()))
    max_value = 0
    curmax = data[-1] # current max : i시점에서 팔 수 있는 최대가격
    for i in range(len(data)-2,-1,-1): # 뒤에서부터 돌아야 함
        if data[i] < curmax:
            max_value += curmax-data[i]
        else:
            curmax = data[i] # i시점까지는 더 비싸게 팔 수 있게 되었다!
    print("#{} {}".format(tc+1,max_value))

 

1926 간단한369게임
다양한 방법으로 풀 수 있는 문제. 

# 방법 1 - 내장함수를 사용하지 않고 그냥 순회하는 방법
for i in range(1,int(input())+1):
    n = str(i)
    cnt = 0
    for digit in n:
        if digit in ["3","6","9"]:
            cnt += 1
    print(i if cnt==0 else "-"*cnt, end=" ")
    
    
# 방법 2 - 내장함수(count)를 사용하는 방법
for i in range(1,int(input())+1):
    cnt = str(i).count("3") + str(i).count("6") + str(i).count("9")
    if cnt == 0:
        print(i, end=" ")
    else:
    	print("-"*cnt, end=" ")

 

2007 패턴 마디의 길이
문제 조건이 조금 명확하지 않은 것 같기는 하지만, 통과는 쉽게 할 수 있는 문제

for tc in range(int(input())):
    pattern = input()
    start = pattern[0]
    result = 0
    for i in range(1, len(pattern)):
        # i인덱스에서 현재 알파벳과 같은 알파벳이 나왔을 때, i인덱스 전까지와 i인덱스 부터 2i까지 같으면 발견한 것
        if pattern[i] == start and pattern[0:i]==pattern[i:2*i]:
            result = i
            break
    print("#{} {}".format(tc+1,result))

 

2005 파스칼의 삼각형
고민을 많이 하다가, 재귀로 푸는 방법 선택.
다음 줄을 출력할 때는 직전 줄의 정보를 리스트로 넘겨서 쉽게 다음줄을 만들어낼 수 있게 구현함

def triangle(li, k):
    global N
    if k == N + 1:
        return
    tmp = [0] * k
    for i in range(k):
        if i == 0 or i == (k - 1):
            tmp[i] = 1
        else:
            tmp[i] = li[i] + li[i - 1]
    print(" ".join(map(str, tmp)))
    triangle(tmp, k + 1)

for tc in range(int(input())):
    N = int(input())
    print("#{}".format(tc+1))
    triangle([],1)

 

댓글