전체 글
-
[프로그래머스/C++] 자릿수 더하기C++ 문제 풀이/프로그래머스 2023. 7. 4. 14:39
문제 이름 : 자릿수 더하기 1. 문제 설명 2. Solution #include int solution(int n) { int answer = 0, i = 1; while(true){ answer += n % (int)pow(10, i) / (int)pow(10, i-1); if(n==n % (int)pow(10, i)) break; i++; } return answer; } 내가 이 문제를 풀었던 방법은 조금 복잡한 방법이다. 우선 조건에 대한 반복문을 실행하기 위해 while 문을 활용했다. 그리고 n을 10의 i 제곱의 나머지를 구하면 현재 내가 구하길 원하는 자릿수까지의 숫자가 나온다. 그리고 10의 i-1제곱으로 나눠주면 내가 원하는 자릿수만 남기고 그 뒤의 숫자들은 날릴 수 있다. 예를 들면..
-
[프로그래머스/C++] 약수의 합C++ 문제 풀이/프로그래머스 2023. 7. 2. 18:52
문제 이름 : 약수의 합 1. 문제 설명 2. 약수 이 문제를 그냥 for문을 n번 돌려서 나머지가 0이 나오는 수들을 모두 더할 수 있겠지만 그렇게 하면 최적화가 되지 않고 비효율적이다. 따라서 약수의 성질을 생각해보고 그에 따른 최적화를 생각해봐야 한다. 약수는 자기자신을 어떤수로 나누었을때 나머지가 0이 되는 수를 의미한다. 따라서 다음과 같은 예시를 살펴보자. 1 2 5 10 이는 10의 약수들을 나열한 것이다. 이는 (1, 10) (2, 5) 이렇게 두개씩 짝지으면 두 숫자를 곱했을때 10이 나온다. 이런 성질을 이용하면 두 숫자를 연결할 때 왼쪽에 나올 수 있는 가장 큰 수는 자기자신의 제곱근이다. 따라서 for문을 제곱근 만큼 반복시키면 약수를 모두 탐색할 수 있다. 3. Solution #..
-
[프로그래머스/C++] 바탕화면 정리C++ 문제 풀이/프로그래머스 2023. 6. 27. 18:36
문제 이름 : 바탕화면 정리 1. 문제 설명 2. 중간에 막혔던 부분 #include #include using namespace std; vector solution(vector wallpaper) { vector answer; int maxX = 0, maxY = 0, minX = wallpaper[0].length(), minY = wallpaper.size(); for(int i=0;i maxY) maxY = i; } } } answer = {minY, minX, maxY, maxX}; return answer; } 이 문제를 풀때 제일 처음에 작성했던 코드이다. 이 문제의 결과와 기댓값을 비교해보면 min값은 다 맞는데 max값이 전부 틀린 것을 볼 수 있다. 이 문제를 푸는 것이 가장 어려웠는..
-
[프로그래머스/C++] 공원 산책C++ 문제 풀이/프로그래머스 2023. 6. 24. 20:59
문제 이름 : 공원 산책 1. 문제 설명 2. 푸는 방식 이 문제를 푸는 방식은 여러가지가 있지만 switch 문을 사용해서 동서남북 방향에 대응하는 예외처리를 하는 방법이 있다. 하지만 이런 방식은 너무 코드가 길어지고 여러번 예외처리를 해야하는 단점이 있다. 그리고 4가지 방향 이외에 방향이 추가되면 대응하지 못한다는 단점이 있다. 그래서 map을 이용하여 동서남북에 대한 방향 벡터를 value로 설정해주었다. 3. Solution #include #include #include using namespace std; vector solution(vector park, vector routes) { vector answer; int i,j; map dirMap; //Map 방향 벡터 초기화 dirMap..
-
[프로그래머스/C++] 추억 점수C++ 문제 풀이/프로그래머스 2023. 6. 22. 23:28
문제 이름 : 추억 점수 1. 문제 설명 2. 매개 변수 이렇게 3가지 매개변수가 있는데 여기서 name과 yearning의 크기는 같고 각각의 순서에 대응되는 값이기 때문에 map 자료구조를 사용하면 훨씬 편하게 정리할 수 있다. 그리고 map을 사용하면 장점이 결국 문제가 2차원 배열인 photo를 돌면서 name을 탐색하고 name에 맞는 점수를 더해주는 문제인데 탐색을 map 방식으로 바꾸게 되면 시간복잡도를 줄일 수 있다. 3. Solution #include #include #include using namespace std; vector solution(vector name, vector yearning, vector photo) { vector answer; map scoreMap; //m..
-
[물리 기반 시뮬레이션/수치 해석] 미분 방정식의 기초 - Euler's method그래픽스/물리 기반 시뮬레이션 2023. 6. 21. 05:25
1. 미분 방정식이란? 미분 방정식은 미지 함수와 그의 도함수들로 이루어진 방정식을 의미한다. 따라서 미분 방정식을 해결하면 함수를 얻어 낼 수 있다. 가장 일반적인 예시는 다음과 같다. (이는 상미분 방정식 즉, ODE의 예시이다.) 이를 2차원 벡터로 확장하여 Vector Field 에서의 미분방정식으로 확장하면 다음과 같이 나타낼 수 있다. 2. Initial Value Problem 미분 방정식의 해를 구하는 방법은 매우 다양한 방식이 있는데 이 중 하나를 소개하려 한다. Initial Value Problem은 해석하면 초기 값 문제 즉, 초기 값이 주어진 상태에서 미분 방정식의 해를 구하는 방식이다. ODE를 풀다보면 적분상수가 생기기 때문에 특정 해를 구하기 어렵다 이떄 Initial Val..
-
[프로그래머스/C++] 달리기 경주C++ 문제 풀이/프로그래머스 2023. 6. 20. 19:57
문제 이름 : 달리기 경주 1. 시간 초과 #include #include #include using namespace std; vector solution(vector players, vector callings) { vector answer; for(int i = 0; i < callings.size(); i++) { auto it = find(players.begin(),players.end(),callings[i]); if(it != players.end()){ int idx = it - players.begin(); swap(players[idx], players[idx-1]); } } answer = players; return answer; } 처음에는 단순히 find 함수를 이용하여 pla..