Coding Test(125)
-
[Programmers] Lv2. n^2 배열 자르기 | C++
🔗문제 보러가기 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 👨💻풀이 과정 \(n\)의 최대 개수가 천만 개라, 2차원 배열을 만들어 수를 저장하고, 나눗셈과 몫 연산을 통해 left ~ right 사이의 숫자만 추출하면 되지 않을까 생각하여 코드를 짰는데, 시간 초과가 났습니다. 시간을 더 줄일 방도가 필요했습니다. 방법을 모색하던 중, (i, j)에 저장되는 숫자는 max(i + 1, j + 1)이라는 특성을 발견하였습니다. 0 1 2 3 --------- 0 | 1 2 3 4 1 | 2 2 3 4 2 | 3 3 3 4 3 | 4 4 4 4 // ..
2023.06.14 -
[Programmers] Lv2. 연속 부분 수열 합의 개수 | C++
🔗문제 보러가기 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 👨💻풀이 과정 중복없이 저장을 해야 하니, set에 저장하였습니다. 연속 수열 합계를 구하는 부분에선 deque를 활용하여 풀었습니다. 인덱싱이 가능하고, 맨 앞 맨 뒤 삽입 삭제가 효율적인 deque라면 좋은 효율을 낼 것 같다고 생각하였습니다. 알고리즘은 다음과 같습니다. 1. vector에 저장되어 있던 elements의 원소들을 모조리 deque로 옮겨 저장합니다. 2. 0번 인덱스부터 추출할 개수 (1 ~ element.size()) 인덱스만큼의 합계를 구합니다. - 합계를 set에..
2023.06.14 -
[Programmers] Lv2. 구명보트 | C++
🔗문제 보러가기 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 👨💻풀이 과정 문제를 잘 읽어야 합니다. 보트에 탈 수 있는 사람은 단 두 명입니다. 1. 사람들의 무게를 오름차순으로 정렬 2. 가장 작은 무게를 지닌 사람의 인덱스(li = 0)와 가장 무거운 무게를 지닌 사람의 인덱스(hi = people.size() - 1)를 지정 3. people[li] + people[hi] > limit 이라면, 제일 무거운 사람 혼자 밖에 탈 수 없으므로 answer++, hi-- 4. people[li] + people[hi] hi가 될 때까지 3, 4번을 ..
2023.06.13 -
[Programmers] Lv2. 짝지어 제거하기 | C++
🔗문제 보러가기 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 👨💻풀이 과정 처음에는 정규식을 활용해서 replace()를 할까 생각했었는데 문제의 의도(짝을 발견하면 제거하고 앞 뒤 붙이는)와는 맞지 않았고, 짝을 기준으로 앞과 뒤 문자열을 합치는 과정에서 오버헤드가 많이 발생하니 어떻게 하면 좋을까 고민이었습니다. 그런데, 복잡할 것 없이 스택(Stack)을 활용하면 정말 쉽게 풀리는 문제였습니다. 좀 더 사고를 확장하여 유연하게 할 필요가 있을 것 같네요. ✏️소스 코드 및 결과 #include #include using namespace std;..
2023.06.12 -
[Programmers] Lv2. 피보나치 수 | C++
🔗문제 보러가기 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 👨💻풀이 전략 입력 데이터 범위가 최대 10만 인 걸 고려하면, 재귀로는 절대 못 구하니 DP(Dynamic Programming)으로 풀었습니다. 1234567로 나눈 나머지를 리턴하라는 걸로 보아, 오버플로우를 조심해야겠다고 생각했구요. ✏️소스 코드 및 결과 #include using namespace std; const int DIVISION = 1234567; int solution(int n) { vector F(n + 1); F[0] = 0; F[1] = 1; for (int i..
2023.06.12 -
[Programmers] Lv2. 이진 변환 반복하기 | C++
🔗문제 보러가기 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 👨💻풀이 과정 사실상 풀이 과정이라 할 것도 없습니다. 문제에서 제시한 내용 그대로 코드로 구현하면 됩니다. ✏️소스 코드 및 결과 #include #include #include using namespace std; string RemoveZero(const string& str, int& removedZeroCount) { string result; for (const auto element : str) { if (element == '1') { result.push_back('1'); ..
2023.06.12