Notice
Recent Posts
Recent Comments
Link
관리 메뉴

윤일무이

[백준-Python] 7567번: 그릇 본문

🥧 Python/⚙️ 코딩테스트

[백준-Python] 7567번: 그릇

썸머몽 2023. 2. 23. 00:07
728x90
 

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)

 

728x90