Skip to content

Conversation

@hadongun
Copy link
Collaborator

@hadongun hadongun commented Apr 7, 2025

πŸ”— 문제 링크

https://www.acmicpc.net/problem/4949

βœ”οΈ μ†Œμš”λœ μ‹œκ°„

1.5h

✨ μˆ˜λ„ μ½”λ“œ

μ€€μ„œλ‹˜μ˜ λ¬Έμžμ—΄ 문제λ₯Ό 보고 νλ¦„νƒ€μ„œ λ¬Έμžμ—΄, μŠ€νƒ 문제λ₯Ό κ°€μ Έμ™€λ΄€μŠ΅λ‹ˆλ‹΅
μ•„λž˜μ— μ£Όμ„μœΌλ‘œ μ‚½μ§ˆν•œ μ½”λ“œλ₯Ό λ„£μ–΄λ’€λŠ”λ° 문제 쑰건을 μ œλŒ€λ‘œ μ•ˆ 보고 ν’€μ—ˆμ–΄μš”.
μ£Όμ„μœΌλ‘œ 달린 μ½”λ“œλ₯Ό 보면 κ΄„ν˜Έμ˜ 개수만 μ„Έμ–΄μ„œ κ· ν˜•μ„ 이루면 λ˜λ„λ‘ μ½”λ“œλ₯Ό μž‘μ„± + stack을 μ „ν˜€ ν™œμš©ν•˜μ§€ λͺ»ν•˜λŠ” μ½”λ“œ

각각의 쀄을 ν•œ λ²ˆμ”© μž…λ ₯ λ°›κ³  yes or noλ₯Ό 좜λ ₯ ν›„ λ‹€μŒ λ¬Έμž₯을 λ‹€μ‹œ μž…λ ₯ λ°›λŠ” ꡬ쑰의 문제이고 맨 λ§ˆμ§€λ§‰μ—” 점 ν•˜λ‚˜κ°€ μž…λ ₯되기 λ•Œλ¬Έμ— 점 ν•˜λ‚˜λ₯Ό μž…λ ₯λ°›μœΌλ©΄ 전체 while문을 μ’…λ£Œμ‹œν‚€λ„λ‘ if문을 μ„€κ³„ν–ˆμŠ΅λ‹ˆλ‹€
이후 charrr에 곡백 문자λ₯Ό μ œκ±°ν•˜λ©΄μ„œ ν•œ 쀄을 μž…λ ₯ λ°›κ³  for문을 톡해 ν•œ λ¬Έμžμ”© ν™•μΈν–ˆμŠ΅λ‹ˆλ‹€.

κ΄„ν˜Έμ˜ 개수만 κ· ν˜•μ„ 이룬닀면 ") i have a apple (" μ΄λŸ¬ν•œ λ¬Έμž₯열도 성립이 λ©λ‹ˆλ‹€.
λ”°λΌμ„œ μ—¬λŠ” κ΄„ν˜Έ, λŒ€κ΄„ν˜Έλ₯Ό λ°›μœΌλ©΄ 이λ₯Ό μŠ€νƒμ— λ„£μŠ΅λ‹ˆλ‹€. 이후 λ‹«λŠ” κ΄„ν˜Έ, λŒ€κ΄„ν˜Έλ₯Ό 받은 경우 stack 내에 μ—¬λŠ” κ΄„ν˜Έ, λŒ€κ΄„ν˜Έκ°€ μžˆλ‹€λ©΄ μ΄λŠ” κ· ν˜•μ„ 이룬 κ²ƒμœΌλ‘œ κ°„μ£Όν•˜κ³  μŠ€νƒ 내에 μžˆλŠ” μ—¬λŠ” κ΄„ν˜Έ, λŒ€κ΄„ν˜Έλ₯Ό μ§€μ›λ‹ˆλ‹€.
λ§Œμ•½ μŠ€νƒ 내에 아무것도 μ—†κ±°λ‚˜, μ—¬λŠ” κ΄„ν˜ΈμΈλ°, λ‹«λŠ” λŒ€κ΄„ν˜Έκ°€ λ“€μ–΄μžˆλ‹€λ©΄ κ· ν˜•μ„ 이루지 λͺ»ν•˜λ―€λ‘œ balance = False 둜 ν• λ‹Ή ν›„ break둜 λ°˜λ³΅λ¬Έμ„ νƒˆμΆœν•œ ν›„ noλ₯Ό 좜λ ₯ν•©λ‹ˆλ‹€
λͺ¨λ“  각 λ¬Έμžλ“€μ„ λΉ„κ΅ν•˜μ˜€μ„ λ•Œ κ· ν˜•μ΄ μž‘ν˜€μžˆμ—ˆλ‹€λ©΄ balance 의 값은 True이고, stack λ‚΄μ—λŠ” 아무것도 남지 μ•Šκ²Œ λ©λ‹ˆλ‹€.
λ”°λΌμ„œ 이 경우 yesλ₯Ό 좜λ ₯ν•©λ‹ˆλ‹€.

πŸ“š μƒˆλ‘­κ²Œ μ•Œκ²Œλœ λ‚΄μš©

Copy link
Contributor

@dohyeondol1 dohyeondol1 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

λ‹€μ‹œλ§Œλ‚œ λ¬Έμžμ—΄ μŠ€νƒ λ¬Έμ œλ„€μš”
μ €λ²ˆμ— κ΄„ν˜Έλ¬Έμ œλ₯Ό ν’€μ—ˆλ˜ 기얡이 μžˆλŠ”λ°, λΉ„μŠ·ν•œ μœ ν˜•μΈ 것 κ°™μŠ΅λ‹ˆλ‹€.

저도 μ²˜μŒμ— '.'κΉŒμ§€ 문자 μž…λ ₯을 λ°›μœΌλ €κ³  ν–ˆλŠ”λ°,
μƒκ°ν•΄λ³΄λ‹ˆ μž…λ ₯μ—μ„œ μ—”ν„°λ₯Ό 치게되면 κ²°κ΅­ κ°œν–‰ 문자 λ˜ν•œ μž…λ ₯이 λ˜κΈ°λ•Œλ¬Έμ—
string을 μ΄μš©ν•΄μ„œ κ·Έλƒ₯ 쀄 μ „μ²΄λ§Œ λ°›μ•˜μŠ΅λ‹ˆλ‹€.
python에도 λΉ„μŠ·ν•œ κΈ°λŠ₯이 μžˆμ„ 것 같은데 ν•œλ²ˆ μ•Œμ•„λ³΄μ…”λ„ 쒋을 것 κ°™μŠ΅λ‹ˆλ‹€.

풀이 방식 μžμ²΄λŠ” λ˜‘κ°™μŠ΅λ‹ˆλ‹€.

C++ μ½”λ“œ
#include <iostream>
#include <stack>
#include <string>
using namespace std;

int main() {
    cin.tie(nullptr)->sync_with_stdio(false);
    
    string str;
    while(true) {
        getline(cin, str);
        if(str == ".") break;

        stack<char> stack;
        bool balance = true;

        for(char c : str) {
            if(c == '(' || c == '[') stack.push(c);
            else if (c == ')') {
                if(stack.empty() || stack.top() != '(') {
                    balance = false;
                    break;
                }
                stack.pop();
            }
            else if(c == ']') {
                if(stack.empty() || stack.top() != '[') {
                    balance = false;
                    break;
                }
                stack.pop();
            }
        }
        if(!stack.empty()) balance = false;
        cout << (balance ? "yes" : "no") << '\n';
    }

    return 0;
}

λ§ˆμ°¬κ°€μ§€λ‘œ μˆ˜λ„ μ½”λ“œλ₯Ό μž‘μ„±ν•˜μ‹œλŠ” κ±Έ μΆ”μ²œλ“œλ¦½λ‹ˆλ‹€!
μ„€λͺ…을 잘 μ¨μ£Όμ…¨μ§€λ§Œ, μˆ˜λ„ μ½”λ“œλ₯Ό μ“°λŠ”κ²Œ μŠ€ν„°λ””μ› 뿐만 μ•„λ‹ˆλΌ μžμ‹ μ—κ²Œλ„ 도움이 λ˜κ±°λ©μš”.
μŠ€νƒ λ¬Έμ œμ— λŒ€ν•΄μ„œ 점점 감을 μž‘μ•„κ°€μ‹œλŠ” 것 κ°™μ•„μ„œ 보기 μ’‹μŠ΅λ‹ˆλ‹€!!
λ˜ν•œ 이전에 λΉ„ν•΄μ„œ 점점 μ½”λ“œκ°€ κΉ”λ”ν•΄μ§€λŠ” 것 κ°™μ•„μš”!!

@froglike6
Copy link
Collaborator

저도 μ²˜μŒμ—λŠ” μŠ€νƒμ„ μ•ˆ μ“°κ³  μ‹Άμ–΄μ„œ κ΄„ν˜Έμ˜ 개수둜 κ³„μ‚°ν•˜λŠ” 방법을 λ– μ˜¬λ ΈλŠ”λ°, ν‹€λ €μ„œ μŠ€νƒμœΌλ‘œ λŒμ•„μ™”μŠ΅λ‹ˆλ‹€..

μ€€μ„œλ‹˜μ΄ ν’€μ—ˆλ˜ λ¬Έμ œμ™€ 맀우 μœ μ‚¬ν•˜κ΅°μš” γ…Žγ…Ž

Python

import sys
input = sys.stdin.readline

while True:
    line = input().rstrip('\n')
    if line == '.':
        break
    
    stack = []
    balanced = True
    for char in line:
        if char == '(' or char == '[':
            stack.append(char)
        elif char == ')':
            if not stack or stack.pop() != '(':
                balanced = False
                break
        elif char == ']':
            if not stack or stack.pop() != '[':
                balanced = False
                break
    
    if stack:
        balanced = False
    
    print("yes" if balanced else "no")

Copy link
Collaborator

@caucsejunseo caucsejunseo left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

μ œκ°€ 이전에 ν’€μ—ˆλ˜ λ¬Έμ œμ™€ μœ μ‚¬ν•΄μ„œ μ‰½κ²Œ 풀이λ₯Ό λ– μ˜¬λ Έλ˜ 것 κ°™μŠ΅λ‹ˆλ‹€!

μ–΄λ–»κ²Œ μ½”λ“œλ₯Ό μž‘μ„±ν•΄μ•Ό '.'을 μž…λ ₯λ°›μ•˜μ„ λ•Œ μž…λ ₯을 κ·Έλ§Œλ°›κ²Œ ν•  수 μžˆμ„μ§€ κ³ λ―Όν–ˆμ—ˆλŠ”λ° 잘 생각이 μ•ˆλ‚˜λ”λΌκ΅¬μš”

while (1) { fgets(str, sizeof(str), stdin); // ν•œ 쀄 μž…λ ₯ λ°›κΈ° if (strcmp(str, ".\n") == 0) break; // μž…λ ₯ μ’…λ£Œ 쑰건

λ°±μ€€μ—μ„œλŠ” κ·Έλƒ₯ κΌ­ μ‚¬μš©μžκ°€ λ§ˆμ§€λ§‰μ— '.'을 μž…λ ₯ν•˜μ§€ μ•Šμ•„λ„ λ˜λŠ” μ½”λ“œλ₯Ό μž‘μ„±ν•˜λŠ” 것도 ν•˜λ‚˜μ˜ λ°©λ²•μ΄λΌλŠ” κ±Έ μ•Œκ²Œ λ˜μ—ˆλ„€μš” :)

@hadongun hadongun merged commit 5884e8a into AlgoLeadMe:main Apr 13, 2025
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants