본문 바로가기
Leetcode

20. Valid Parentheses

by Doromi 2024. 4. 29.
728x90
반응형

주어진 문자열에서 괄호가 올바르게 짝지어져 있는지 확인하는 문제입니다. 

열린 괄호는 같은 종류의 닫힌 괄호로 닫혀야 합니다.
괄호는 올바른 순서로 닫혀야 합니다.

public class Solution {
    public bool IsValid(string s) {
        Stack<char> stack = new Stack<char>();

        foreach(char c in s){
            if(c =='(' || c == '{' || c == '['){
                stack.Push(c);
            }
            else{
                if(stack.Count() == 0) return false;
                char top = stack.Pop();
                if ((top == '(' && c != ')') ||
                    (top == '{' && c != '}') ||
                    (top == '[' && c != ']')) {
                    return false;
                }
            }
        }
        return stack.Count() == 0;
    }
}

 

인터뷰에서 이 문제에 대해 물어봤고, OOP 관련 대답을 제대로 하지 못했습니다..

이 코드는 객체 지향 프로그래밍(OOP)의 기본 원칙을 만족합니다:
  1. 캡슐화 (Encapsulation):
    • Solution 클래스 내부에는 멤버 변수와 메서드가 캡슐화되어 있습니다.
    • IsValid 메서드는 클래스 내부에서만 접근 가능하며, 외부에서 직접 접근할 수 없습니다.
  2. 상속 (Inheritance):
    • 현재 코드에서는 상속 관계가 없습니다. 하지만 이 코드가 다른 클래스를 상속받거나 다른 클래스에 의해 상속될 수 있습니다.
  3. 다형성 (Polymorphism):
    • 다형성은 클래스 간의 관계에서 발생합니다. 현재 코드에서는 다형성이 명시적으로 사용되지 않았습니다. 하지만 이후에 다른 클래스와 상호 작용하면서 다형성을 활용할 수 있습니다.
  4. 추상화 (Abstraction):
    • Stack과 List와 같은 데이터 구조를 사용하여 추상화를 달성했습니다.
    • IsValid 메서드 내부에서 세부 구현을 숨기고, 균일한 인터페이스를 제공합니다.

 

이 코드는 SOLID 원칙 중 일부를 만족합니다.

SOLID 원칙은 객체 지향 프로그래밍에서 유지보수 가능하고 확장 가능한 소프트웨어를 작성하기 위한 지침입니다 :

  1. 단일 책임 원칙 (Single Responsibility Principle, SRP):
    • 이 코드는 하나의 주요 책임을 가진 메서드인 IsValid를 가지고 있습니다. 이 메서드는 괄호가 균형을 이루는지 확인하는 역할을 수행합니다. 따라서 SRP를 만족합니다.
  2. 개방/폐쇄 원칙 (Open/Closed Principle, OCP):
    • 현재 코드는 확장에는 열려 있지만 수정에는 닫혀 있습니다. 새로운 유효성 검사 규칙을 추가하려면 IsValid 메서드를 수정하지 않고도 새로운 클래스를 작성하여 확장할 수 있습니다.
  3. 리스코프 치환 원칙 (Liskov Substitution Principle, LSP):
    • 이 코드는 상속 관계가 없으므로 LSP를 직접 적용할 필요는 없습니다.
  4. 인터페이스 분리 원칙 (Interface Segregation Principle, ISP):
    • 현재 코드에서는 인터페이스가 사용되지 않으므로 ISP를 적용할 필요가 없습니다.
  5. 의존성 역전 원칙 (Dependency Inversion Principle, DIP):
    • 현재 코드는 외부 의존성이 없으며 DIP를 적용할 필요가 없습니다.

 

728x90
반응형

'Leetcode' 카테고리의 다른 글

237. Delete Node in a Linked List  (0) 2024.05.01
203. Remove Linked List Elements  (0) 2024.05.01
21. Merge Two Sorted Lists  (0) 2024.04.23
112. Path Sum  (0) 2024.04.23
222. Count Complete Tree Nodes  (0) 2024.04.22