박경록 저자님의 코딩 테스트 합격자 되기 c++ 편을 완독 하는 것을 목표로 남기는 공부 일지
(배열, 스택)
문제 설명
array의 각 element 중 divisor로 나누어 떨어지는 값을 오름차순으로 정렬한 배열을 반환하는 함수, solution을 작성해주세요.
divisor로 나누어 떨어지는 element가 하나도 없다면 배열에 -1을 담아 반환하세요.제한사항
arr은 자연수를 담은 배열입니다.
정수 i, j에 대해 i ≠ j 이면 arr[i] ≠ arr[j] 입니다.
divisor는 자연수입니다.
array는 길이 1 이상인 배열입니다.
#include <string> #include <vector> #include <algorithm> using namespace std; vector<int> solution(vector<int> arr, int divisor) { vector<int> answer; if (divisor == 1) { sort(arr.begin(), arr.end()); return arr; } for (int i =0; i < arr.size(); i++) { if ((arr[i] % divisor) == 0) answer.push_back(arr[i]); } if ( answer.size() == 0 ) answer.push_back(-1); sort(answer.begin(), answer.end()); return answer; }
문제 설명
정수 , , 가 주어집니다. 다음 과정을 거쳐서 1차원 배열을 만들고자 합니다.행 열 크기의 비어있는 2차원 배열을 만듭니다.
에 대해서, 다음 과정을 반복합니다.
1행 1열부터 행 열까지의 영역 내의 모든 빈 칸을 숫자 i로 채웁니다.
1행, 2행, ..., n행을 잘라내어 모두 이어붙인 새로운 1차원 배열을 만듭니다.
새로운 1차원 배열을 arr이라 할 때, arr[], arr[], ..., arr[]만 남기고 나머지는 지웁니다.
정수 , , 가 매개변수로 주어집니다. 주어진 과정대로 만들어진 1차원 배열을 return 하도록 solution 함수를 완성해주세요.제한사항
#include <string> #include <vector> using namespace std; vector<int> solution(int n, long long left, long long right) { vector<int> answer; // i의 값을 2차원 배열의 인덱스들로 바꿔서 풀이 for (auto i = left; i<=right; i++) { int row = i % n; int col = i / n; // Lower Triangle(x==y 포함) if (row >= col) { answer.push_back(row + 1); } // Upper Triangle else if (row < col) { answer.push_back(col + 1); } } return answer; }
문제 설명
다음 규칙을 지키는 문자열을 올바른 괄호 문자열이라고 정의합니다.(), [], {} 는 모두 올바른 괄호 문자열입니다.
만약 A가 올바른 괄호 문자열이라면, (A), [A], {A} 도 올바른 괄호 문자열입니다. 예를 들어, [] 가 올바른 괄호 문자열이므로, ([]) 도 올바른 괄호 문자열입니다.
만약 A, B가 올바른 괄호 문자열이라면, AB 도 올바른 괄호 문자열입니다. 예를 들어, {} 와 ([]) 가 올바른 괄호 문자열이므로, {}([]) 도 올바른 괄호 문자열입니다.
대괄호, 중괄호, 그리고 소괄호로 이루어진 문자열 s가 매개변수로 주어집니다. 이 s를 왼쪽으로 x (0 ≤ x < (s의 길이)) 칸만큼 회전시켰을 때 s가 올바른 괄호 문자열이 되게 하는 x의 개수를 return 하도록 solution 함수를 완성해주세요.제한사항
s의 길이는 1 이상 1,000 이하입니다.
#include <string> #include <vector> #include <stack> #include <map> using namespace std; bool validation(const string& s , int startIndex) { map <char, char> match_pair = { {')','('}, {'}','{'}, {']','['}, }; stack<char> leftOpen; for (int j=0; j < s.size(); j++) { // 왼쪽으로 j칸 회전 int index = (startIndex + j) % s.size(); char c = s[index]; if (c == '(' || c == '[' || c == '{') { leftOpen.push(c); } else { if (leftOpen.empty()) return false; if (leftOpen.top() != match_pair[c]) return false; leftOpen.pop(); } } return leftOpen.empty(); } int solution(string s) { int answer = 0; stack<char> leftOpen; for (int i = 0; i < s.size(); i++) { if (validation(s, i)) answer++; } return answer; }