• TOC {:toc}

이 글은 백준 온라인 저지의 5355번 문제를 파이썬(Python)으로 풀이한 것을 모아놓은 글입니다.

일종의 연습 기록이며 제가 정답을 받은 코드와 참고할만한 다른 코드를 같이 기록합니다. 필요한 경우 코드에 대한 해설을 기록합니다만 코드는 통과했어도 해설은 틀릴 수 있기 때문에 가볍게 참고해주시길 부탁드립니다. 피드백은 편하신 방법으로 자유롭게 주시면 감사하겠습니다.

2021.03.24

메모리 시간 코드 길이
28776 KB 64 ms 297 B
T = int(input())

for i in range(T):
    exp = input().split()
    n = float(exp[0])
    for i in range(1, len(exp)):
        if exp[i] == "@":
            n *= 3
        elif exp[i] == "%":
            n += 5
        elif exp[i] == "#":
            n -= 7
    print("{:.2f}".format(n))

아이디어 & 풀이

split()을 이용해 입력받은 각 문자를 원소로 갖는 리스트를 만들고 index notation을 이용해 각 원소에 접근한다.

  • 첫 문자는 실수로 변환해 초깃값으로 저장하고,
  • 두 번째 문자부터 경우를 나눠 연산한다. 두 번째 문자부터 사용하기 때문에 range의 시작을 1로 지정한다.

참고 답안

t = int(input())

for _ in range(t):
    s = input().split()
    a = float(s[0])
    # 리스트의 slice index를 사용한다. [start:end:step]
    for x in s[1:]:
        if x == "@":
            a *= 3
        elif x == "%":
            a += 5
        else:
            a -= 7
    print("%.2f" % a)

아이디어 & 풀이

i를 이용한 반복문에서 i 값을 사용하지 않는다면 i 대신 _로 표기해도 된다.

for x in list를 이용해 리스트 안의 원소를 순회한다.

  • range()i를 순회하면서 매번 리스트의 원소에 접근하는 것보다 (i.e., list[i]) 효율적이다.
  • 범위 지정이 필요한 경우 index에서 slice notation을 사용한다.