본문 바로가기

알고리즘68

[C++] 유한소수 판별하기 유한소수 판별하기 두 정수 a와 b가 매개변수로 주어질 때, a/b가 유한소수이면 1을, 무한소수라면 2를 return하도록 solution 함수를 완성해주세요. 분자와 분모의 최대공약수로 분모를 나눈 뒤, 그 분모가 2, 5 가 아닌 소수로 나눠지면 무한소수, 아니라면 유한소수입니다. #include #include #include using namespace std; // 소수 구하기 O(log n) bool isPrime2(int n) { for (int i = 2; i 2023. 5. 22.
[C++] 문자열 밀기 문자열 밀기 문자열 A와 B가 매개변수로 주어질 때, A를 밀어서 B가 될 수 있다면 밀어야 하는 최소 횟수를 return하고 밀어서 B가 될 수 없으면 -1을 return 예를 들어 A가 "hello" B가 "ohell" 이면 hello를 우측으로 1번 민다고 생각하면 됩니다. A를 한칸씩 우측으로 밀어보면서 B와 비교하여 풀었는데, 다른사람의 풀이를 보고 감탄을 하여 바로 가져왔습니다. 나의 풀이 #include #include #include using namespace std; int solution(string A, string B) { int answer = 0, b = A.size(); string a = ""; if(A == B) return 0; else{ for(int i = 0; i .. 2023. 5. 22.
[C++] (공백분리) 컨트롤 제트 컨트롤 제트 숫자와 "Z"가 공백으로 구분되어 담긴 문자열이 주어집니다. 문자열에 있는 숫자를 차례대로 더하려고 합니다. 이 때 "Z"가 나오면 바로 전에 더했던 숫자를 뺀다는 뜻입니다. 숫자와 "Z"로 이루어진 문자열 s가 주어질 때 답을 return #include #include #include using namespace std; int solution(string s) { int answer = 0; int tmp; stringstream ss(s); vector words; string word; while (getline(ss, word, ' ')) { words.push_back(word); } for (int i = 0; i < words.size(); i++) { if (words[i].. 2023. 5. 19.
[C++] 소인수분해, 7의 개수 소인수분해 자연수 n이 매개변수로 주어질 때 n의 소인수를 오름차순으로 담은 배열을 return하도록 solution 함수를 완성해주세요. #include #include #include using namespace std; // n이 소수인지 판별 bool isPrime(int n) { if (n < 2) return false; for (int i = 2; i * i 2023. 5. 18.
[C++] 중복된 문자 제거, 가장 큰 수 찾기 중복된 문자 제거 문자열이 매개변수로 주어질 때, 문자열에서 중복된 문자를 제거하고 하나의 문자만 남긴 문자열 return #include #include #include using namespace std; string solution(string my_string) { string answer = ""; vector str; for(int i=0; i < my_string.size(); i++){ if(find(str.begin(), str.end(), string(1, my_string[i])) == str.end()){ answer += string(1, my_string[i]); } str.push_back(string(1, my_string[i])); } return answer; } 가장 큰.. 2023. 5. 17.
[C++] (대소문자 범위) 문자열안에 문자열, 숨어있는 숫자의 덧셈 (1) 문자열에 문자열 문자열 str, str2가 매개변수로 주어지면 str2가 str1에 포함되는지 판별하는 문제입니다. string의 find() 함수를 이용합니다. str2 가 str1 안에 포함된다면 string::npos을 반환합니다. #include #include using namespace std; int solution(string str1, string str2) { if (str1.find(str2) != string::npos){ return 1; } return 2; } 숨어있는 숫자의 덧셈 (1) 문자열 my_string이 매개변수로 주어질 때, my_string안의 자연수들의 합을 반환하는 문제입니다. 문자의 아스키코드 값으로 접근할 수 있는 문제입니다. #include #includ.. 2023. 5. 16.
[알고리즘] Isolation Forest Isolation Forest 정상 데이터로부터 학습한 모델을 기반으로 각 객체의 정상/이상 여부를 판단하는 방법론입니다. 이상치 데이터를 라벨링하지 않고, 정상 데이터만으로 이상탐지 모델을 학습할 때 사용하기도 합니다. 2008년 제안된 알고리즘이지만 현재까지도 이상치 탐지에 높은 성능을 보여 유용하게 사용됩니다. 알고리즘 포인트를 분리하기 위해 알고리즘은 속성을 무작위로 선택한 다음 해당 속성에 허용되는 최소값과 최대값 사이의 분할 값을 무작위로 선택하여 샘플에서 반복적으로 파티션을 생성합니다. 이렇게 여러 번 분할한 공간을 의사결정나무 (Decision Tree) 형태로 표현할 수 있습니다. 정상치일수록 완전히 고립시킬 수 있을 때까지 의사결정나무를 깊숙하게 타고 내려가야 합니다. 반대로 이상치의 .. 2023. 5. 9.
C++ 백준 BOJ 1620 나는야 포켓몬 마스터 이다솜 포켓몬 이름을 입력받아 입력 순서대로 번호를 부여하고 도감을 만듭니다. 해당하는 포켓몬의 이름을 입력하면 번호를, 번호를 입력하면 이름을 출력하는 문제입니다. 1620번: 나는야 포켓몬 마스터 이다솜 첫째 줄에는 도감에 수록되어 있는 포켓몬의 개수 N이랑 내가 맞춰야 하는 문제의 개수 M이 주어져. N과 M은 1보다 크거나 같고, 100,000보다 작거나 같은 자연수인데, 자연수가 뭔지는 알지? 모르면 www.acmicpc.net #include #include #include using namespace std; int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); int N, M; string p; string name[100001]; unor.. 2022. 12. 27.
C++ 백준 BOJ 11726 2 x n 타일링 2×n 크기의 직사각형을 1×2, 2×1 타일로 채우는 방법의 수를 구하는 프로그램을 작성하는 문제입니다. 자주 접할 수 있는 DP문제(다이나믹 프로그래밍) 유형입니다. 보통 DP문제는 피보나치 수열, 재귀함수 등을 이용하여 해결 가능합니다. 11726번: 2×n 타일링 2×n 크기의 직사각형을 1×2, 2×1 타일로 채우는 방법의 수를 구하는 프로그램을 작성하시오. 아래 그림은 2×5 크기의 직사각형을 채운 한 가지 방법의 예이다. www.acmicpc.net #include using namespace std; int dp[1001]; int main() { ios::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); int num; cin >> num;.. 2022. 12. 19.