문제
스킬 체크에서는 총 2가지 문제가 주어집니다.
1. 하나의 문자열이 주어집니다. 그 문자열 내에서 같은 문자가 있다면 문자를 삭제하는 행위를 반복 했을 때 모두 없어지는지 아닌지를 판단하는 문제입니다.
예를 들자면 "aabaab"라면 처음에 'a'가 붙어 있으므로 "aa"와 "aa"를 없애면 "bb"만 남습니다. 이때 "bb"도 위의 조건을 만족하기 때문에 삭제가 됩니다.
"cbaabc"도 마찬가지로 "aa"가 삭제되고 "bb"가 삭제되고 "cc"가 삭제되고를 반복하면 삭제가 됩니다.
반대로 "abab"는 문자열 내에 반복되는 문자가 없으므로 삭제가 불가능합니다.
이 때 삭제가 가능하면 1을 아니면 0을 return하는 문제입니다.
2. 하나의 숫자로 된 배열이 주어집니다. 이 배열의 모든 숫자의 최소공배수를 구하는 문제입니다.
[2, 6, 8, 14] 가 주어진다면 168이 return 됩니다.
[1, 2, 3]이 주어진다면 6이 return 됩니다.
풀이
문제는 굉장히 간단했습니다. 둘 다 굉장히 짧고 간단 명료한 문제들입니다.
1번 문제는 처음에는 문자열을 배열로 나누어서 비교를 할까 생각했습니다만 '같은 2가지 문자가 사라진다.'를 보자마자 스택이 떠올랐습니다. 스택으로 풀면 아주 쉽게 풀 수 있을 것 같아서 스택을 이용해서 풀었습니다.
2번 문제는 최소 공배수를 구하는 문제입니다. 기본적으로 최소 공배수를 구하는 공식을 알고 있다면 아주 쉽게 풀 수 있는 문제입니다만...
중간에 실수를 해서 컴파일을 여러번 하게 되었습니다.
코드
1번 문제
#include <iostream>
#include <string>
#include <stack>
using namespace std;
int solution(string s)
{
int answer = 0;
stack<char> temp;
for(int i = 0 ; i < s.size() ; i++){
if(temp.size() != 0){
if(s.at(i) == temp.top())
temp.pop();
else
temp.push(s.at(i));
}
else{
temp.push(s.at(i));
}
}
if(temp.size() == 0)
answer = 1;
else answer = 0;
return answer;
}
2번 문제
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
int result(int a, int b){
int return_value = 1;
for(int i = 1 ; i <= a ; i++){
if(a%i == 0 && b%i == 0){
return_value = return_value * i;
a = a/i;
b = b/i;
i = 1;
}
}
return return_value * a * b;
}
int solution(vector<int> arr) {
int answer = 1;
for(int i = 0 ; i < arr.size() ; i++){
answer= result(answer, arr[i]);
}
return answer;
}
PS. 별거 아닌 짧은 문제이지만 뿌듯하게 해결했습니다. 이제 3단계를 준비해야하는데 다양한 자료구조와 사용법이 필요하겠네요...
'공부 > C++' 카테고리의 다른 글
[C/C++] 덩치 (백준 7568) (0) | 2020.08.14 |
---|---|
[C/C++] 실패율 (프로그래머스 : 2019 카카오 블라인드) (0) | 2020.07.31 |
[C/C++] 키패드 누르기 (프로그래머스 : 2020 카카오 인턴십) (0) | 2020.07.30 |
[C/C++] 다리를 지나가는 트럭 (프로그래머스) (0) | 2020.07.20 |
[C/C++] 멀쩡한 사각형 (프로그래머스) (0) | 2020.07.17 |