전체 글 264

프로그래머스 : 최댓값과 최솟값(Lv.2)

간단한 문제이다.이 문제는 string을 int로 변경하고 int를 string으로 변환할 수 있으면 해결가능하다. 문제 해결 방법1. ' '를 기준으로 문자를 나눈다.2. ' '가 나오거나 s의 마지막 index라면 문자를 string->to->int해서 min과 max를 갱신한다.3. min 과 max를 출력한다. #include #include #include using namespace std;void Cal(const string& temp, int& max, int& min);string solution(string s) { string answer = ""; int min = 987654321; int max = -987654321; string temp..

프로그래머스 2026.09.03

프로그래머스 : 올바른 괄호(Lv.2)

이 문제는 Stack을 이용해서 푸는 문제이다.프로그래밍할 때 괄호 열고 닫고를 검사하는 문제라고 생각하면 된다. 나는 Stack을 사용하지 않고 문제에 접근하였다. 문제 해결 방법1. int count를 선언.2. for문을 이용해 String s를 검사하면서 0부터 s.size()까지 '('가 나오면 count++ ')'가 나오면 count--;3. 만약 for문을 도는 와중 count가 음수가 되면 answer = false 후 break;4. for문이 끝나고 count가 0보다 크다면 '('가 ')'보다 많이 나왔기 때문에 answer = false; 시간복잡도 : s의 길이는 10만 이하 1차 for문으로 해결되니 이상 없음.공간복잡도 : 이상 없음.#include#include using n..

프로그래머스 2026.09.03

Abstract Factory 패턴

추상 팩토리 패턴은 관련성 있는 여러 객체들을 하나의 패밀리로 묶어 일관된 방식으로 생성하고 그 제품군 전체를 쉽게 교체할 수 있도록 만든 패턴이다. 건물마다 팩토리를 따로 만들면 종족이 바뀔 때 해당 코드들을 계속 수정해야 한다.하지만 추상 팩토리를 활용해 종족별 팩토리를 하나씩 만들면 종족을 바꿔도 클라이언트 코드는 변화가 거의 없다.유닛, 건물 등 관련 객체들을 한 묶음으로 생성하는 공장을 만든다는 뜻이다. 추상 팩토리 내부에서 개별 객체 생성은 팩토리 메서드로 구현되는 경우도 있어 두 패턴은 함께 사용되기도 한다. public interface IStarcraftFactory{ IWorker CreateWorker(); IBuilding CreateBarracksOrGateway(); ..

디자인패턴 2025.11.26

Factory Method 패턴

팩토리 메소드 패턴은 객체 생성 책임을 상위 클래스가 아닌 하위 클래스에게 맡기는 패턴이다.상위 클래스는 무엇을 만들지 모른 채 객체를 생성해야 한다는 사실만 알고 있으며 실제 어떤 인스턴스를 만들지는 서브클래스가 결정한다. 새로운 제품 클래스가 추가돼도 상위 클래스는 전혀 수정할 필요가 없다. public abstract class WeaponCreator{ public abstract IWeapon CreateWeapon(); public void Attack() { IWeapon weapon = CreateWeapon(); weapon.Attack(); }} public class SwordCreator : WeaponCreator{ public ..

디자인패턴 2025.11.26

Simple Factory 패턴

객체 생성을 처리하는 클래스를 팩토리라고 부른다.객체 생성을 한 곳에서 대신해 주는 단순 Factory 클래스를 만드는게 심플 팩토리 패턴이다. 객체를 직접 new나 Instantiate하지 않고 Factory클래스의 메서드에 생성을 위임한다.팩토리는 조건에 따라 어떤 객체를 생성할지 결정한다. Client -> SimpleFactory -> ProductA / ProductB1. 클라이언트가 SimpleFactory에 생성을 요청함.2. SimpleFactory 내에서 A나 B를 생성함. public interface IWeapon{ void Attack();}public class Sword : IWeapon{ public void Attack() => Debug.Log("칼");}publ..

디자인패턴 2025.11.26

Command 패턴

커맨드 패턴은 함수 호출을 객체로 감싸서 다루는 패턴이다. Redo, Undo를 구현할 때 사용이 되고(리플레이) 키보드 입력 변경할 때 사용된다.(스킬Key를 바꾸고 싶다.) public interface ICommand{ void Execute();}public class JumpCommand : ICommand{ private Player _player; public JumpCommand(Player player) { _player = player; } public void Execute() { _player.Jump(); }}public class AttackCommand : ICommand{ private Player _p..

디자인패턴 2025.11.26

Adapter 패턴

어댑터 패턴은 이미 존재하는 클래스의 인터페이스를 클라이언트가 원하는 다른 인터페이스 형태로 변환해주는 패턴이다.필요한 형태와 이미 제공되어 있는 형태가 맞지 않을 때 사이에 어댑터를 두어 연결하는 패턴이다.(Wrapper 패턴이라고 부르기도 함.)서로 맞지 않는 인터페이스를 Adapter를 이용해서 연결해 준다.충분한 테스트를 거쳐 버그가 적은 클래스를 부품으로 재사용할 때 어댑터 패턴을 사용한다. 만약 버그가 발생해도 기존 클래스는 버그가 없으므로 어댑터를 중심적으로 조사하면 된다. 기존 클래스에서 A방식으로 제공되고 있는데 클라이언트가 B방식으로 호출하고 싶다면? 위임을 이용한 어댑터 패턴으로 예를 들어보자.public class OldSword{ public void Slash() { ..

디자인패턴 2025.11.25

Observer 패턴

옵저버 패턴은 주체(Subject)의 상태가 바뀌면 등록한 옵저버(Observer)들에게 자동으로 알림이 가는 패턴이다.1대 N구조이다(Subject - Observer) 예를 들면 집에서 어머니가 저녁밥을 하고 있다고 가정해 보자.나랑 아버지는 어머니한테 저녁 준비 다되면 알려주세요~하고 등록을 한다.어머니는 저녁이 다되면 밥 다됐다!! 먹으러 나와라고 나와 아버지한테 소리를 친다.이게 옵저버 패턴이다. 게임에서는 HP나 MP가 변경될 때 변화를 감지하고 UI가 자동으로 갱신되도록 옵저버 패턴을 자주 사용한다.또한 아이템을 획득했을 때 사운드 재생, UI 업데이트, 로그 출력 등 여러 작업을 동시에 처리해야 하는데이런 경우에도 옵저버 패턴을 사용하면 구조가 훨씬 깔끔하고 관리가 쉬워진다. C#은 eve..

디자인패턴 2025.11.25

Builder 패턴

빌더 패턴은 복잡한 객체를 생성할 때, 객체를 여러 파츠로 나누어 조립하는 방식으로 생성하도록 하는 패턴이다. 우리 어릴 때 가지고 놀던 로봇을 생각해 보자.몸통에 팔, 다리, 머리 끼우는 연결 고리 같은 게 있었다. 다양한 파츠를 이용해서 나만의 로봇을 만들었던 것으로 기억한다.빌더 패턴도 이와 같다. 객체를 생성할 때 그 객체를 구성하는 부분 부분을 먼저 생성하고 이를 조합해서 전체 객체를 생성한다.생성할 객체의 종류가 손쉽게 추가, 확장이 가능한 설계이다. 게임에서는 캐릭터 코디를 할 때 빌더 패턴이 사용된다.public class Character{ public string Body; public string Hair; public string Weapon; public vo..

디자인패턴 2025.11.25