전체 글 267

프로그래머스 : 숫자의 표현(Lv.2)

연속하는 자연수로 n을 표현하는 문제이다.투 포인터를 떠올려야 한다.Start와 end 변수를 두고 합이 n보다 작으면 end를 ++ 합이 n보다 크면 Start를 ++ 두 개의 변수를 이용해서 문제에 접근한다. 문제 해결 방법1. start, end, sum을 선언2. while문을 start 3. sum 값이 n보다 작으면 end++ 후 sum+=end;4. sum 값이 n보다 크면 sum-=start 후 start ++; // 순서를 조심해야 한다. start는 먼저 빼고 한 칸 전진함. #include #include using namespace std;int solution(int n) { int answer = 0; int sum = 1; int start = 1; ..

프로그래머스 2026.09.04

프로그래머스 : JadenCase 문자열 만들기(Lv.2)

들어오는 문자열 s의 모든 단어의 첫번째만 대문자로 바꾸는 문제이다.(숫자가 나오면 숫자 그대로)나는 아스키 코드를 이용해서 문제를 해결하였다.//97, 122 a~z //65, 90 A~Z //48, 57 0~9기억이 제대로 안나서 cout로 출력해서 확인했다. #include #include #include using namespace std;string solution(string s) { string answer = ""; bool sig = false; for(int i = 0; i = 97 && s[i] = 65 && s[i]

프로그래머스 2026.09.04

프로그래머스 : 최솟값 만들기(Lv.2)

이 문제는 크기가 같은 배열이 두개 들어오는데 두 배열의 원소끼리 곱하여 최소가 되도록 하는 문제이다.곱의 최소를 구하기 위해서는 A 배열의 최솟값과 B배열의 최댓값을 곱해주면 된다.그러기 위해서는 정렬이 필요하다. 문제 해결 방법1. A와 B 배열을 정렬한다.2. for문을 이용해서 작은 값과 큰 값을 곱한다. #include #include #include using namespace std;int solution(vector A, vector B){ int answer = 0; sort(A.begin(), A.end()); sort(B.begin(), B.end()); for(int i = 0; i

프로그래머스 2026.09.04

프로그래머스 : 최댓값과 최솟값(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