인프런 커뮤니티 질문&답변

김현우님의 프로필 이미지
김현우

작성한 질문수

10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트

2-O

2-O 질문있습니다

작성

·

61

0

http://boj.kr/af87db56b1254e1baa345487841bc5a5

1. (와[ 입력시 스택에 넣기

2.) 입력시 맨위가 (아니라면 오류 또는 비어있다면 오류

3. ]시 똑같이 오류

  1. 다끝냈는데 스택 안비면 오류

라는 논리로 문제를 풀었습니다.

하지만 특정경우에 yes와 no가 같이 나와서 틀렸다고 하는거 같습니다

f만 변화시킨후 마지막에 한꺼번에 출력하면 맞았다고 하더라고요

어떤경우에 yes와 no가 같이 나오는지 알수있을까요

답변 2

0

큰돌님의 프로필 이미지
큰돌
지식공유자

안녕하세요 현우님 ㅎㅎ

코드리뷰는 다음과 같습니다.

  1. 불필요한 변수 cntB, cntS 를 제거해야 합니다.

     

    2. f에 대한 로직이 좀 이상합니다.

		if (!st.empty())
        {
        	cout<<"no\n";
			f = 1;
		}
            
		if(!f)
			cout<<"yes\n";	

지금 보시면 f를 기반으로 1일 때는 no하고 break;걸고 끝냈는데 또 아래에 보시면 no를 하고 f를 1로 만듭니다. 만약 f가 1일 때 break걸면서 -> st가 empty가 아닐때 no가 한번더 출력이 될 수 있습니다.

이에 대한 로직을 수정해야 합니다.

 

제가 한번 다듬어봤습니다. 참고부탁드립니다.

#include <bits/stdc++.h>
using namespace std;

int main(){
    string s;
    while(true){
        getline(cin, s);
        if(s == ".")
            break;

        stack<char> st;
        bool isBalanced = true;

        for(char it : s){
            if(it == '(' || it == '['){
                st.push(it);
            } else if(it == ')'){
                if(st.empty() || st.top() != '('){
                    isBalanced = false;
                    break;
                }
                st.pop();
            } else if(it == ']'){
                if(st.empty() || st.top() != '['){
                    isBalanced = false;
                    break;
                }
                st.pop();
            }
        }

        if(!st.empty())
            isBalanced = false;

        if(isBalanced)
            cout << "yes\n";
        else
            cout << "no\n";
    }
    return 0;
}


또 질문 있으시면 언제든지 질문 부탁드립니다.

좋은 수강평과 별점 5점은 제게 큰 힘이 됩니다. :)

감사합니다.

강사 큰돌 올림.

 

0

안녕하세요, 인프런 AI 인턴입니다.

질문하신 내용은 프로그래밍 로직과 관련된 문제해결 방식에 대한 것으로 보입니다.

제공해주신 내용으로는 구체적인 코드를 보지 못해 정확한 원인을 파악하기 어렵지만, “yes”와 “no”가 같이 나오는 경우는 예외 처리 로직에서 문제가 발생했을 가능성이 높아 보입니다. 특정 조건에서 “yes” 또는 “no”를 출력하는 부분이 누락되었거나, 조건 판단 후에도 다음 조건으로 넘어가 추가적인 출력을 하게 되는 경우 등이 있을 수 있습니다.

스택을 사용하는 괄호 짝 맞춤 문제에서는 다음과 같은 주의점을 고려해야 합니다:

  1. 여는 괄호((, [)가 입력될 때마다 스택에 삽입합니다.
  2. 닫는 괄호(), ])가 입력될 때는 스택의 맨 위가 해당 닫는 괄호와 짝이 되는 여는 괄호인지 확인합니다. 짝이 맞지 않거나 스택이 비어있다면 오류입니다.
  3. 모든 입력을 처리한 후 스택이 비어있지 않다면 괄호의 짝이 맞지 않는다는 의미이므로 오류입니다.

위 사항들을 모두 만족시키지 않는 경우에 “no”를 출력하고, 모든 조건을 만족시키는 경우에 “yes”를 출력하도록 로직을 구성해야 합니다. 또한, 중간에 오류를 판단하는 경우나 처리 후에는 즉시 출력 후 반복문을 종료시키거나 다른 로직으로 넘어가서 불필요한 출력이 발생하지 않도록 주의해야 합니다.

문제 해결을 위해선 각 조건 분기마다 정확히 어떤 처리가 이루어지는지, 오류 발생 시 즉시 처리를 중단하고 결과를 출력하는지 등을 세심하게 점검해 보시기 바랍니다.

원하는 답변을 찾지 못하셨다면, 강의 관련 내용은 해당 강의의 커뮤니티 질문&답변 게시판에 질문해주시면 강사님께서 확인하시고 답변해 주실 거예요!

김현우님의 프로필 이미지
김현우

작성한 질문수

질문하기