문제 링크 #include #include #include using namespace std; string solution(string number, int k) { string answer = ""; int len = number.size(); int answerLen = len - k; int limit = len - (answerLen - 1); int q = 0; int nextIdx = 0; for (int i = 0; i < answerLen; i++){ char bigNum = -1; q = nextIdx; while (q < limit){ if (max(number[q], bigNum) == number[q] && number[q] != bigNum){ bigNum = number[q];..
#include #include #include #include using namespace std; int solution(int n, vector edge) { int answer = 0; vector graph(20001); vector visited(20001, 0); queue queue; vector counts(20001, 0); for (vector line : edge){ graph[line[0]].push_back(line[1]); graph[line[1]].push_back(line[0]); } queue.push(1); visited[1] = 1; int prev = 1; int next = 0; while (queue.size() != 0){ int num = qu..
Softeer - 현대자동차그룹 SW인재확보플랫폼 softeer.ai 출퇴근길 문제는 DFS로 풀어야하는 걸 알겠지만 DFS의 탈출 조건에 대해서 이해하고 생각하는데 어려움을 느꼈다. // DFS 레츠고 #include #include using namespace std; int visitedStoT[100001]; int visitedTtoS[100001]; vector dir[100001]; int N, M; int S, T; bool go(int cur, int end, int visited[]){ vector &tmp = dir[cur]; bool pass = false; for (int i = 0; i < tmp.size(); i++){ if (tmp[i] == end){ // 목적지에 도착하면..
Softeer - 현대자동차그룹 SW인재확보플랫폼 softeer.ai #include #include using namespace std; int main(int argc, char** argv) { vector limit; vector test; int N, M; int range, fast; cin >> N >> M; for(int i = 0; i > range >> fast; for (int k = 0; k > range >> fast; for (int k = 0; k < range; k++){ test.push_back(fast); } ..
Softeer - 현대자동차그룹 SW인재확보플랫폼 softeer.ai 모든 경우의 수를 반복문을 통해서 다 비교하면 복잡도 N^2가 나오는데 N의 범위가 2 ≤ n ≤ 100 이라서 시간이 충분하다. #include #include using namespace std; int main(int argc, char** argv) { int N, value; vector arr; cin >> N; for (int i = 0; i > value; arr.push_back(value); } int MAX = -100000; for (int i = 0; i < N - 1; i++){ for (int k = i + 1; k < N; k++){ MAX = max(arr[i] * arr[k]..
Softeer - 현대자동차그룹 SW인재확보플랫폼 softeer.ai 문제는 위 링크에서 확인바란다. 일단 이 문제는 패턴을 파악해서 수식화하는 능력을 요구한다. 첫번째 네모의 한 변에 있는 점의 개수는 2개, 다음은 3개, 다음은 5, 9, 17 ... 이렇게 늘어나는데 패턴은 #include #include using namespace std; int main(int argc, char** argv) { int N; cin >> N; long long lineCount = 2; for (int i = 0; i
이 과제를 풀 던 당시, 노션에 정리한 내용을 옮긴 것이다. 이상한 점을 발견한다면 알려주세요! 목표 운영체제의 교착(Deadlock)상태를 설명하기 위한 문제인 식사하는 철학자를 이해하고 구현해보자. 스레드란 무엇인가를 말할 수 있다. 뮤텍스란 무엇인가를 말할 수 있다. 교착상태란 무엇인가를 말할 수 있다. 문제 설명 한 명 이상의 철학자가 둥근 테이블에 앉아 다음과 같은 세 행동 중 하나를 취합니다 : 먹기, 생각하기, 잠자기 철학자가 밥을 먹는 도중에는, 생각하거나 잠을 자지 않습니다. 마찬가지로 잠자는 도중에는 밥을 먹거나 생각할 수 없으며, 생각하는 도중에는 밥을 먹거나 잠들 수 없습니다. 철학자들은 둥근 테이블에 앉아있으며, 가운데에는 아주 큰 스파게티 그릇이 놓여 있습니다. 탁자 위에는 몇 ..
미니쉘 프로젝트 깃허브 바로가기 개요 miniShell은 42Seoul에 들어와서 처음으로 C를 이용해서 진행한 큰 프로젝트였다. miniShell은 bash의 기능을 그대로 구현을 해보는 프로젝트이다. shell을 특징과 구현 방법에 대해서 이야기 해보자. (오랜 시간 뒤의 회고라서 디테일이 떨어질 수 있습니다 ㅜㅜ) 구조 및 동작 순서 동작 순서를 간단하게 시각화해보았다. 먼저 shell에 명령어가 입력으로 들어오면 토큰화를 해준다. 토큰은 트리 형태로 파싱을 해주었다. 파이프만 사용하는 shell이라면 linked list 형태로 만들어도 괜찮지만, 보너스 파트인 &&, || 의 기능도 있는 shell이다보니 &&, ||을 처리하기 위해서는 트리 형태로 데이터를 저장하는 것이 정신 건강에 좋다. 토..