[7567] 그릇

sky·2022년 3월 29일
0

BaekJoon Online Judge(B)

목록 보기
11/98
post-thumbnail

문제 설명

♕Bronze Ⅱ


문제

그릇을 바닥에 놓았을 때 그 높이는 10cm 이다. 그런데 두 개의 그릇을 같은 방향으로 포개면 그 높이는 5cm만 증가된다. 만일 그릇이 서로 반대방향으로 쌓이면 높이는 그릇만큼, 즉 10cm 늘어난다. 그릇을 괄호 기호로 나타내어 설명해보자. 편의상 그릇이 쌓여지는 방향은 왼쪽에서 오른쪽이라고 가정한다. 그림에서 ‘(’은 그릇이 바닥에 바로 놓인 상태를 나타내며, ‘)’은 그릇이 거꾸로 놓인 상태를 나타낸다.
만일 그릇이 포개진 모양이 ((((와 같다면 전체의 높이는 25cm가 된다. 왜냐하면 처음 바닥에 있는 그릇의 높이가 10cm이고 이후 같은 방향으로 3개의 그릇이 포개져 있으므로 늘어난 높이는 5+5+5=15 이기 때문이다. ()()와 같은 경우라면 그 높이는 10*4=40cm가 된다.
여러분은 입력에 주어진 모양대로 그릇을 쌓을 때 최종의 전체 그릇 높이를 계산해서 출력해야 한다. 즉 처음 입력으로 주어진 각 그릇의 방향은 바꿀 수 없다.

입력

첫 줄에는 괄호문자로만 이루어진 문자열이 주어진다. 입력 문자열에서 열린 괄호 ‘(’은 바로 놓인 그릇, 닫힌 괄호 ‘)’은 거꾸로 놓인 그릇을 나타난다. 문자열의 길이는 3이상 50 이하이다.

출력

여러분은 그릇 방향이 괄호 문자로 표시된 문자열을 읽어서 그 최종의 높이를 정수로 출력해야 한다.

Solution

C

#include<stdio.h>
#include<string.h>

int main()
{
	char plate[50]; int sum = 10;
	scanf("%s", plate);

	for (int i = 1; i < strlen(plate); i++)
	{
		if (plate[i-1] == '(') { //만일 여기서 plate[i]
			if (plate[i] == '(') //plate[i+1]로 하면 입력한 문자열의 길이가 1 넘어가서 10을 더 더하게 된다.
				sum += 5;
			else
				sum += 10;
		}
		else {
			if (plate[i] == '(')
				sum += 10;
			else
				sum += 5;
		}
	}
	printf("%d", sum);
	return 0;
}

코드 해석

  1. 문자열의 길이는 최대 50이므로 접시 변수의 배열을 총 50으로 설정했다.
  2. 접시 높이의 합계를 구하기 위한 변수 sum을 설정했다.
  3. 문자열의 길이만큼 그릇의 높이를 합산하기 위한 for문을 설정했다.
  4. i를 1로 초기화 한 이유는 위 주석을 보면 알 수 있다.
  5. 처음 문자를 기준으로 if문을 나눴다.
  6. sum을 계산한 걸 출력한다.

anothr solution

for (int i = 1; i < len; i++) {
		if (str[i - 1] != str[i])
			count += 10;
		else
			count += 5;
	}

다른 풀이를 가져왔는데, 훨씬 간단하고 짧은 코드다.

toal time

  • 2022-03-29 | 19:40 - 20:25 : 45분 소요

후기

풀기 전에 먼저 손으로 코드를 일일이 적고 나서 푸니깐 잘 풀렸다! 앞으로 어려운 문제는 이렇게 하면 될 듯 하다.

profile
개발자가 되고 싶은 1人

0개의 댓글