[프로그래머스]level.2 - 호텔 대실(C++)
·
🖥️ Study Note/Coding Test
문제 https://school.programmers.co.kr/learn/courses/30/lessons/155651 내 풀이 시작 시간을 기준으로 예약을 오름차순 정리한다. 방을 배정하면서 멀티셋에 다음 예약자가 들어올 수 있는 시간을 저장한다. ( 예약 종료 시간 + 10 ) 셋을 사용하는 이유는 시간을 오름차순 정렬하여 다음 예약자가 최대한 빨리 들어올 수 있는 시간을 구하기 쉽게하기 위함이다. 그 중에서 멀티셋을 이용한 이유는 예약 시간이 중복될 수 있기 때문이다. 다음 예약자를 받을 때, 멀티셋에 저장된 배정 가능한 시간 중 예약자가 입실 가능한 시간이 있다면 멀티셋에서 해당 시간을 삭제하고 새 예약자에 맞춰 배정 가능한 시간을 갱신한다. 예약자가 입실 가능한 시간이 없다면 멀티셋에서 삭제할..
[프로그래머스]level.2 - 영어 끝말잇기(C++)
·
🖥️ Study Note/Coding Test
문제 https://school.programmers.co.kr/learn/courses/30/lessons/12981#qna 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 코드 #include #include #include #include using namespace std; vector solution(int n, vector words) { vector answer = {0, 0}; set words_set; words_set.insert(words[0]); for(int i = 1; i < words.size(); ++i) { char c = *..
[프로그래머스]level.2 - 시소 짝꿍(C++)
·
🖥️ Study Note/Coding Test
https://school.programmers.co.kr/learn/courses/30/lessons/152996 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 내 풀이 1. 이중 for문 시간 초과는 안나지만 실행시간이 오래 걸린다. #include #include #include using namespace std; long long solution(vector weights) { long long answer = 0; // 오름차순 정렬 sort(weights.begin(), weights.end()); int same_count = 0; for(..
[프로그래머스]level.1 - 핸드폰 번호 가리기(C++)
·
🖥️ Study Note/Coding Test
https://school.programmers.co.kr/learn/courses/30/lessons/12948 문제 설명 프로그래머스 모바일은 개인정보 보호를 위해 고지서를 보낼 때 고객들의 전화번호의 일부를 가립니다. 전화번호가 문자열 phone_number로 주어졌을 때, 전화번호의 뒷 4자리를 제외한 나머지 숫자를 전부 *으로 가린 문자열을 리턴하는 함수, solution을 완성해주세요. 제한 조건 phone_number는 길이 4 이상, 20이하인 문자열입니다. 입출력 예 phone_number return "01033334444" "*******4444" "027778888" "*****8888" 내 풀이 algorithm의 fill 함수를 사용했다. #include #include #inc..
[프로그래머스]level.2 - 연속된 부분 수열의 합(C++)
·
🖥️ Study Note/Coding Test
https://school.programmers.co.kr/learn/courses/30/lessons/178870 문제 설명 비내림차순으로 정렬된 수열이 주어질 때, 다음 조건을 만족하는 부분 수열을 찾으려고 합니다. 기존 수열에서 임의의 두 인덱스의 원소와 그 사이의 원소를 모두 포함하는 부분 수열이어야 합니다. 부분 수열의 합은 k입니다. 합이 k인 부분 수열이 여러 개인 경우 길이가 짧은 수열을 찾습니다. 길이가 짧은 수열이 여러 개인 경우 앞쪽(시작 인덱스가 작은)에 나오는 수열을 찾습니다. 수열을 나타내는 정수 배열 sequence와 부분 수열의 합을 나타내는 정수 k가 매개변수로 주어질 때, 위 조건을 만족하는 부분 수열의 시작 인덱스와 마지막 인덱스를 배열에 담아 return 하는 solu..
[프로그래머스] level.2 - 조이스틱(C++)
·
🖥️ Study Note/Coding Test
https://school.programmers.co.kr/learn/courses/30/lessons/42860 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 내 풀이 #include #include #include using namespace std; int solution(string name) { int answer = 0; int n = name.length(); int turn = n-1; // 조이스틱을 한 방향으로 쭉 움직였을 때 for(int i = 0; i < n; ++i) { // 1. 문자 수정 // A부터 접근 if(name[i]-..
관찰자(Observer) 패턴
·
🖥️ Study Note/Design Patteren
관찰자 패턴은 GoF 패턴 중에서도 가장 널리 사용되고 잘 알려졌지만, 세상을 등지고 살아가는 게임 개발자에게는 생판 처음 듣는 이야기일 수도 있다. { 관찰자 패턴이란? } 관찰자 패턴은 GoF의 행위 패턴 중 하나로, 한 객체의 상태가 변화하면 객체에 관찰자로 등록되어 있는 다른 객체들에게 변화된 상태를 전달하는 패턴이다. 주로 분산 시스템 간에 이벤트를 생성•발생(Publish)하고, 이를 수신(Subscribe)해야 할 때 이용한다. 관찰자 패턴은 MVC(Model View Controller) 구조의 기반이다. 자바의 EventListener나 C#의 delegate와 같이 같은 모던 OOP 언어에서는 자체적으로 관찰자 패턴을 지원한다. { 게임 개발에서 관찰자 패턴 활용하기 : 업적 시스템 }..
[프로그래머스] level.2 - 롤케이크 자르기(C++)
·
🖥️ Study Note/Coding Test
https://school.programmers.co.kr/learn/courses/30/lessons/132265 내 해답 동생한테 먼저 다 먹이고 시작하는 것이 내게는 충격이었던 문제;;; 참고로 동생이 가진 토핑이 0이 되면 map에서 빼주는 것이 매우매우 중요하다. #include #include #include using namespace std; int solution(vector topping) { int answer = 0; map chulsu; map bro; for(const auto& t : topping) ++bro[t]; for(const auto& t : topping) { --bro[t]; ++chulsu[t]; if(bro[t] == 0) bro.erase(t); if(bro..
경량(FlyWeight) 패턴
·
🖥️ Study Note/Design Patteren
{ 경량 패턴이란? } 경량 패턴은 GoF의 구조 패턴 중 하나로, 인스턴스가 필요할 때마다 매번 생성하는 것이 아니고 가능한 공유해서 사용함으로써 메모리를 절약하는 패턴이다. 다수의 유사 객체를 생성하거나 조작할 때 유용하게 사용할 수 있다. 더 자세히 설명하자면 경량 패턴은 한 개의 고유 상태를 다른 객체에서 공유하게 만들어 메모리 사용량을 줄인다. - 고유 상태 (intrinsic state): 유사 객체들의 데이터 값이 같아서 공유할 수 있는 데이터 - 외부 상태 (extrinsic state): 유사 객체들의 데이터 값이 서로 달라서 공유할 수 없는 데이터 { 게임 개발에서 경량 패턴 활용하기 : 나무 클래스 설계하기 } 게임 월드 상에 다수의 나무가 있다. 각 나무들을 구성하는 데이터는 다음과..
[프로그래머스] level.2 - 미로 탈출(C++)
·
🖥️ Study Note/Coding Test
https://school.programmers.co.kr/learn/courses/30/lessons/159993#qna 내 해답 문제 접근은 쉽지만, 시간 복잡도 때문에 고생한 문제이다. 문제에는 ‘출구는 레버가 당겨지지 않아도 지나갈 수 있으며, 모든 통로, 출구, 레버, 시작점은 여러 번 지나갈 수 있습니다.’ 라고 적혀있는데 내 방식에서는 이게 함정이 되었다. 목적지는 레버와 출구 2개가 있는데 각 목적지까지 가는 길에 재방문은 안된다. 그러니까 (시작점→레버) , (레버→ 출구) 경로에 재방문을 허용하면 너무 느리다. 따라서 (시작점→레버) + (방문 기록 초기화) + (레버→ 출구) 이런 식으로 해결했다. 결국 하나의 q에서 BFS를 두 번 도는 형식으로 해결한 것이다. #include #i..