7567번: 그릇
그릇을 바닥에 놓았을 때 그 높이는 10cm 이다. 그런데 두 개의 그릇을 같은 방향으로 포개면 그 높이는 5cm만 증가된다. 만일 그릇이 서로 반대방향으로 쌓이면 높이는 그릇만큼, 즉 10cm 늘어난다.
www.acmicpc.net
풀이
🤷🏻.oO(뭐라는거지?)
'('은 그릇이 바닥에 바로 놓인 상태, ')'은 그릇이 거꾸로 놓인 상태다.
어떤 모양이든 처음 그릇을 바닥에 놓았을 때 그 높이는 10cm인데,
다음에 놓은 그릇이 처음 그릇과 같은 모양이면 5cm가 증가한다.
반면 처음 그릇과 반대의 모양이라면 10cm가 증가한다.
))))
이 그릇의 경우 처음 10cm + ))) 같은 모양으로 5+5+5 해서 총 25cm가 된다.
()()
이 그릇의 경우 처음 10cm + 다른 모양 10 + 다른 모양 10 + 다른 모양 10해서 총 40cm가 된다.
첫 줄에 문자열이 바로 주어지고 계산을 해야 하는데...
첫 줄을 어떻게 줄 것이냐? 여기서 부터 난관이었다.
처음이 (으로 시작할지 )으로 시작할지 모르겠다는 거다.
근데 다시 생각해보면 뭘로 시작하든 첫 접시는 10cm로 시작한다.
그러면 first(처음 접시) = 10을 줘보자.
첫 접시 다음과 첫 접시 다음다음의 모양을 알아야 합계를 구할 수 있는데 이걸 어떻게 알지?
list를 쓰고 for문을 돌려본다.
접시의 개수만큼 확인해보면 되는데, 여기서 인덱스를 써주면 내가 원하는 첫 접시 다음 / 첫 접시 다음다음을 알 수 있다.
for 문을 돌렸을 때 앞이 ( 이고 그 뒤고 ) 라면? first에 () 즉 10cm를 더해주면 된다.
앞이 (이고 뒤도 (라면? first에 5를 더해주면 된다.
말보다 코드를 보는 게 더 빠른 문제다...
처음 접시의 모양과 무관하게 그건 10cm고, 그 뒤에 첫 접시와 같은 모양이든 다른 모양이든, 얘 다음이랑 같은지 다른지가 중요하다.
그래야 계산을 할 수 있는 문제다.
코드 (밑에가 더 낫다)
dish = list(input())
first = 10
for i in range(len(dish)-1) :
if dish[i] == "(" and dish[i+1] == ")" :
first += 10
elif dish[i] == ")" and dish[i+1] == ")" :
first += 5
elif dish[i] == ")" and dish[i+1] == "(" :
first += 10
elif dish[i] == "(" and dish[i+1] == "(" :
first += 5
print(first)
a = list(input())
b = 10 # (
for i in range(len(a)-1):
if a[i] == a[i+1] :
b += 5
elif a[i] != a[i+1] :
b += 10
print(b)
'🥧 Python > ⚙️ 코딩테스트' 카테고리의 다른 글
[백준-Python] 10102번: 개표 (0) | 2023.02.23 |
---|---|
[백준-Python] 5063번: TNG (0) | 2023.02.23 |
[백준-Python] 2884번: 알람 시계 (0) | 2023.02.18 |
[백준-Python] 2754번: 학점계산 (0) | 2023.02.16 |
[백준-Python] 3009번: 네 번째 점 (3) | 2023.02.16 |