그럴듯한 개발 블로그
반응형

https://school.programmers.co.kr/learn/courses/30/lessons/12973

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

연속된 값 빼고 덱에 넣어서 앞뒤 pop 해주면서 찾아주면 되겠다!

#include <iostream>
#include <string>
#include <deque>
using namespace std;

int solution(string s)
{
    int answer = -1;
    deque<int>  dq;
    
    for (int i = 0; i < s.size(); i++)
    {
        if (i <= s.size() && s[i] == s[i + 1])
        {
            s[i] = 'X';
            s[i++ + 1] = 'X';
        }
    }
    for (int i = 0; i < s.size(); i++)
        if (s[i] != 'X')
            dq.push_back(s[i]);
    while (dq.size())
    {
        if (dq.front() == dq.back())
        {
            dq.pop_front();
            dq.pop_back();
        }
        else
            return (0);
    }
    return (1);
}
정확성 테스트
테스트 1 통과 (0.01ms, 4.13MB)
테스트 2 통과 (0.25ms, 4.2MB)
테스트 3 실패 (0.85ms, 4.11MB)
테스트 4 실패 (0.78ms, 3.89MB)
테스트 5 실패 (1.04ms, 4.2MB)
테스트 6 통과 (0.90ms, 4.21MB)
테스트 7 통과 (0.80ms, 4.18MB)
테스트 8 통과 (0.79ms, 4.41MB)
테스트 9 통과 (0.01ms, 4.21MB)
테스트 10 실패 (0.01ms, 4.21MB)
테스트 11 통과 (0.01ms, 4.2MB)
테스트 12 통과 (0.01ms, 3.59MB)
테스트 13 통과 (0.01ms, 3.66MB)
효율성 테스트
테스트 1 통과 (7.62ms, 10.1MB)
테스트 2 통과 (2.41ms, 6.02MB)
테스트 3 실패 (8.02ms, 8.49MB)
테스트 4 실패 (7.82ms, 8.48MB)
테스트 5 실패 (8.26ms, 8.55MB)
테스트 6 통과 (8.64ms, 8.55MB)
테스트 7 통과 (8.21ms, 8.54MB)
테스트 8 통과 (7.70ms, 8.86MB)

음 일단 x표시하는게 비효율적이니까 합쳐보자

#include <iostream>
#include <string>
#include <deque>
using namespace std;

int solution(string s)
{
    int answer = -1;
    deque<int>  dq;
    
    for (int i = 0; i < s.size(); i++)
    {
        if (i == s.size() - 1) // 마지막
        {
            dq.push_back(s[i]);
            cout << s[i] << '\n';
            break ;
        }
        if (s[i] != s[i + 1]) // 이러면 집어넣어
        {
            dq.push_back(s[i]);
            cout << s[i] << '\n';
        }
        else
            i++;
    }
    if (dq.size() % 2)
        return (0);
    while (dq.size())
    {
        if (dq.front() == dq.back())
        {
            dq.pop_front();
            dq.pop_back();
        }
        else
            return (0);
    }
    return (1);
}

왜 안되지

#include <iostream>
#include <string>
#include <stack>
using namespace std;

int solution(string s)
{
    stack<int>  stk;
    
    for (int i = 0; i < s.size(); i++)
    {
        if (stk.empty())
            stk.push(s[i]);
        else if (stk.top() == s[i])
                stk.pop();
        else
            stk.push(s[i]);
    }
    if (stk.empty())
        return (1);
    return (0);
}

걍 스택으로 풀었다. 문제를 잘못 봤다 여기선 연결된 단어  ex) aabbcc 가 들어왔을 때 날려줘야 하는 건데,  맨 처음에 접근 한 건 abccba이건줄 알았다. 문제를 잘 보자...

반응형
profile

그럴듯한 개발 블로그

@donghyk2

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!