※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※

 

이번에 볼 문제는 백준 7567번 문제인 그릇이다.
문제는 아래 링크를 확인하자.

www.acmicpc.net/problem/7567

 

7567번: 그릇

그릇을 바닥에 놓았을 때 그 높이는 10cm 이다. 그런데 두 개의 그릇을 같은 방향으로 포개면 그 높이는 5cm만 증가된다. 만일 그릇이 서로 반대방향으로 쌓이면 높이는 그릇만큼, 즉 10cm 늘어난다.

www.acmicpc.net

이 문제는 다음과 같이 단순하게 구현할 수 있다.

1) 처음에 '('과 ')'가 아닌 아무 문자 하나를 저장해둔다.

2-1) 문자열을 읽으면서, 저장된 문자와 다른 문자가 나온다면 그 저장된 문자를 현재 문자로 바꾸고 답에 10을 더한다. (맨 처음 접시를 내려놓는 경우 또는 접시를 반대로 놓는 경우)

2-2) 같은 문자가 나온다면 답에 5를 더한다. (접시를 포개어 놓는 경우)

 

아래는 제출한 소스코드이다.

#include <iostream>
#include <string>
using std::cin;
using std::cout;
using std::string;

int main()
{
    string s;
    int slen;
    cin >> s;
    slen = s.length();
    char now = 'x'; // 초기상태: 아직 접시가 놓이지 않음
    int ans = 0;
    for (int i = 0;i < slen;i++) {
        if (now != s[i]) { // 같지 않은 경우: 아직 접시를 안 놓았거나 접시가 반대방향
            now = s[i];
            ans += 10;
        }
        else ans += 5; // 같은 경우: 접시가 같은 방향
    }

    cout << ans;

    return 0;
}
728x90

'BOJ' 카테고리의 다른 글

[BOJ 14264 // C++] 정육각형과 삼각형  (0) 2021.01.17
[BOJ 7570 // C++] 줄 세우기  (0) 2021.01.16
[BOJ 7571 // C++] 점 모으기  (0) 2021.01.14
[BOJ 1699 // C++] 제곱수의 합  (0) 2021.01.13
[BOJ 9465 // C++] 스티커  (0) 2021.01.12

+ Recent posts