[SWEA] (D1~D2 문제풀이) 기초 다지기 Part1

CHAEN·2022년 6월 30일
0

problem solving

목록 보기
24/33
post-thumbnail

꾸준히 안하면 아주 기초적인 것도 자꾸 까먹는다..
그래서 매우매우 쉬운 문제부터 매일매일 문제 푸는 것에 의의를 둔 ps


D1. 2072번 - 홀수만 더하기

나의 풀이

T = int(input())

for test_case in range(1, T + 1):
    nums = list(map(int, input().split()))
    odds = [x for x in nums if x % 2 == 1]
    
    print(f"#{test_case} {sum(odds)}")

리스트 컴프리헨션을 써야겠다고 생각은 했는데 문법이 긴가민가해서 그 부분만 검색해서 풀었다.

D1. 2071번 - 평균값 구하기

나의 풀이 - 1

T = int(input())

for test_case in range(1, T + 1):
    nums = list(map(int, input().split()))
    avg = round(sum(nums)/10, 0)
    print(f'#{test_case} {int(avg)}')

나의 풀이 - 2

import statistics

T = int(input())

for test_case in range(1, T + 1):
    nums = list(map(int, input().split()))
    avg = round(statistics.mean(nums), 0)
    print(f'#{test_case} {int(avg)}')

자꾸 import statistics 하는걸 까먹고 냅다 평균 구해달라고 하다가 에러나서 2번 풀었다ㅎㅎ
어쩐지 파이썬은 기본으로 평균정도는 구해줄 것 같았는데..

D1. 2070번 - 큰 놈, 작은 놈, 같은 놈

나의 풀이

T = int(input())

for test_case in range(1, T + 1):
    a, b = map(int, input().split())
    sign = ''
    if a > b:
        sign = '>'
    elif b > a:
        sign = '<'
    else:
        sign = '='
    
    print(f'#{test_case} {sign}')

D1. 2068번 - 최대수 구하기

나의 풀이

T = int(input())

for test_case in range(1, T + 1):
    nums = list(map(int, input().split()))
    print(f'#{test_case} {max(nums)}')

.. 뭔가 잘못된 것 같다
이 문제 모음집에 20문제가 있는데 이걸 다 풀어야 하는 걸까..?
D1은 빼고 풀어야겠다.


D2. 1926번 - 간단한 369게임

나의 풀이

T = int(input())

for test_case in range(1, T + 1):
    check = list(map(int, str(test_case)))
    count = 0
    count += check.count(3)
    count += check.count(6)
    count += check.count(9)
    
    if count:
        print('-' * count, end=' ')
    else:
        print(test_case, end=' ')

간단한 문제인데 구현하는 부분에서 생각을 좀 오래 했다.
처음에는 in, not in을 이용해서 조건문을 걸어주려고 하다가 개수가 중요하다는 걸 깨닫고 풀이 방향을 바꾸었다.
지금 보니까 숫자를 굳이 리스트로 바꾸지 않고 그냥 문자열로 사용하면 될 것 같다.

T = int(input())

for test_case in range(1, T + 1):
    check = str(test_case)
    count = 0
    count = check.count('3') + check.count('6') + check.count('9')
    
    if count:
        print('-' * count, end=' ')
    else:
        print(test_case, end=' ')

D2. 1859번 - 백만 장자 프로젝트

나의 풀이 - fail

T = int(input())

for test_case in range(1, T + 1):
    days = int(input())
    price = list(map(int, input().split()))
    income = 0
    while len(price):
        max_price = max(price)
        max_index = price.index(max_price)
        if max_index == 0:
            break
        income = income + (max_price * max_index - sum(price[:max_index]))
        price = price[max_index+1:]
        
    print(f'#{test_case} {income}')

나의 접근 : 리스트에서 가장 큰 수를 중심으로 잘라가며 이익을 계산

테스트케이스 10개 중 6개만 통과한다.. 뭐가 문제일까??
심지어 input 용량이 너무 커서 테스트도 안된다ㅜㅜ
다들 뒤에서부터 검사한다고 하는데 나는 어쩐지 반항심이 생겨 내가 풀던 방법으로 해결해보고싶다..ㅎ

profile
공부중입니다

0개의 댓글

관련 채용 정보