본문 바로가기

Software Engineering/Algorithm

(10)
[BJ-G4] C++ : 1106번 호텔 지난 알고리즘 풀이 이후로 블로그로 기록하지는 않았지만, 꾸준히 하루에 최소 한 문제씩, 목표 3문제씩 코드카타를 해왔다. 오늘 풀이할 문제는 백준 Gold4의 "호텔"이라는 문제다. 문제 링크: https://www.acmicpc.net/problem/1106문제 분석Input: C : 늘려야 할 고객의 수N : 도시의 개수(비용 , 고객의 수) * N : 각 도시에서의 홍보비 별 구할 수 있는 고객의 수Output: result: 홍보 비용으로 얻을 수 있는 고객의 수문제 풀이더보기#include #include #include constexpr int INF = 1e9; //max Intusing namespace std;int main() { ios::sync_with_stdio(false)..
[BaekJoon Silver3] C++: 이면수와 임현수 그동안 하루에 한 문제 이상씩 알고리즘 문제를 계속 풀어오긴 했지만, 블로그로 정리하지는 못했다. 오늘 풀 문제는 문제 길이부터가 어마어마하게 길어서 정리하지 않고는 풀기 힘들 것 같아 다시 블로그를 작성하게 되었다. 문제 링크: https://www.acmicpc.net/problem/1291문제 분석Input: input: 문제에서 주어진 방식으로 분석해야 되는 자연수Output: result: 분석 결과1: 이면수 - (4 or 6 이상의 수) and (각 자릿수의 합이 홀수)2: 임현수 - (2 or 4) or (합성수 and 소인수의 개수가 짝수인 수)3: 성경수 - 이면수도, 임현수도 아닌 수.4: 이면수 & 임현수 ` 완벽한 숫자와 태초의 숫자들(2와 3)의 합` 이라는 absolute의 조..
[BaekJoon Silver5] C++: 단어 정렬 Solved.ac Class2에 있는 단어 정렬에 대한 풀이 및 탐구에 대한 기록.정답률 40.448%.문제 분석Input: 단어의 개수 N알파벳 소문자 단어 N개, 최대 길이 50.Output: 정렬한 단어들을 순서대로 출력.길이가 짧은 것부터, 같으면 사전 순으로. 단, 중복 단어는 하나만 남기고 제거.문제 풀이초안소요시간: 23분 30초 : 다 풀고 조금 멍때렸다...#include using namespace std;struct Node {public: string word; Node* left; Node* right; Node(const string& w) : word(w), left(nullptr), right(nullptr) {}};class BinarySearchTree {private: ..
[BaekJoon Bronze1] C++: 크레이지 타임 백준 에 있는 "크레이지 타임"에 대한 풀이 및 탐구에 대한 기록.정답률 78.255%.문제 분석Input: 카드의 개수 NN개의 줄에 걸쳐 (카드 종류) (숫자) 가 주어짐.Output: N개의 줄에 걸쳐 (시간) (중앙 내리치기) 출력.1시부터 시작, 순서대로 시간을 외친다.시간 역행의 법칙: 만약 모래시계 카드가 나온다면, 시간은 거꾸로 흐른다.동기화의 법칙: 내가 부를 숫자와 카드가 일치하면, 중앙을 내리친다.과부하의 원칙: 위 두 법칙이 동시에 발동하면, 아무 일도 일어나지 않는다.문제 풀이초안소요시간: 23분 42초.#include #include #include #include using namespace std;int TimeCounter(int prevTime, bool isClockwi..
[BaekJoon Bronze2] C++: 블랙잭 Solved.ac Class.2에 있는 "블랙잭" 문제에 대한 풀이 및 탐구에 대한 기록.정답률: 49.003%목   차 문제 분석Input: 카드의 개수 N(3 ≤ N ≤ 100)과 맞춰야할 숫자 M(10 ≤ M ≤ 300,000)카드에 쓰여 있는 수 : 100,000을 넘지 않는 양의 정수 Output: M을 넘지 않으면서 M에 최대한 가까운 카드 3장의 합문제 풀이초안#include #include #include using namespace std;int main() { int cardCount, targetNum; vector cardVec; int result = 0; cin >> cardCount >> targetNum; for (int i = 0; i > input; cardVec.pus..
[Programmers Lv. 2] C++: 최댓값과 최솟값 프로그래머스 Lv.2에 있는 "최댓값과 최솟값" 문제에 대한 풀이 및 탐구에 대한 기록.정답률: 79%목   차 문제 분석Input: s: 공백으로 구분된 숫자들을 가진 문자열.Output: anwer: (최솟값) + " " + (최댓값)문자열을 받아 최소, 최대를 출력하기.문제 풀이초안#include #include #include using namespace std;string solution(string s) { vector intArr; stringstream ss(s); string token; while (getline(ss, token, ' ')) { intArr.push_back(stoi(token)); } int max = intArr[0]; ..
[Programmers Lv. 1] C++: 가장 많이 받은 선물 프로그래머스 Lv.1에 있는 "가장 많이 받은 선물" 문제에 대한 풀이 및 탐구에 대한 기록.정답률 24%.목   차 문제 분석Input: friends: 친구 이름 목록.gifts: 선물을 주고 받은 기록. (ex: muzi frodo = muzi가 frodo에게 선물을 주었다.)Output: result: 다음달에 선물을 가장 많이 받을 친구가 받는 선물의 개수.A -> B 5회, B -> A 3회  라면, 다음 달엔 B-> A 1회.0회 또는 같다면, 선물 지수(받은 횟수 - 준 횟수)에 따라 선물을 받는다.선물 지수도 같다면 다음 달에 주고 받지 않음.문제 풀이초안소요 시간: 55분 34초.#include #include #include using namespace std;int solution(..
[Programmers Lv. 1] C#: 성격 유형 검사하기 프로그래머스 Lv.1에 있는 "성격 유형 검사하기" 문제에 대한 풀이 및 탐구에 대한 기록.2022 KAKAO INTERNSHIP 출제 문제.정답률 52%목   차 문제 분석Inputsurvey: 판별할 유형의 종류choices: survey의 길이 = 질문의 개수Outputanswer: 성격 유형 (4자리의 알파벳)성격 유형R TC FJ MA N점수 체계: A3점 -> A2점 ->  A1점 ->  0점 ->  B1점 ->  B2점 ->  B3점A, B 중 높은 점수 = 성격. 점수가 같을 시 알파벳 순.문제 풀이초안소요 시간: 9분 11초. 시도 횟수: 1회.using System;public class Solution { public string solution(string[] surve..
[Programmers Lv. 1] C++: 로또의 최고 순위와 최저 순위 프로그래머스 Lv.1에 있는 "로또의 최고 순위와 최저 순위" 문제에 대한 풀이 및 탐구에 대한 기록.목   차 로또의 최고 순위와 최저 순위간만에 C++, 그리고 vector를 사용하게 된 문제다. 이에 따라 문제풀이를 시작하기 전에 가볍게 vector의 각종 키워드에 대한 복습부터 하고 문제풀이에 들어갔다. vector 주요 키워드//vector의 맨 뒤에 요소 추가.lottos.push_back(44);//vector의 size(실제 요소의 개수) 구하기.std::cout   문제 풀이#1차 답안이 코드는 정답이긴 하지만, switch - case 문을 사용할 때 하드코딩된 숫자로 사용하는 것은 그 의미를 알기 힘들고 유지보수성을 떨어트리므로, 개선이 필요해보인다.#2차 답안위의 코드에서 하드코딩된..
[Programmers Lv. 1] C#: 모의고사 프로그래머스 Lv.1에 있는 "모의고사" 문제에 대한 풀이 및 탐구에 대한 기록.목   차모의고사문제 해설문제 풀이 과정을 순차적으로 정리했다. #1차 시도 if (a1 >= a2) { if (a3 > a1) { result = new int[1]; result[0] = 1; } else if (a3 == a1) { if (a1 == a2) { result = new int[3]; result[0] = 1; ..