백준 algorithm
-
백준 1373 - 2진수 8진수백준 algorithm 2020. 3. 26. 20:21
=> 수의길이가 1000000 이므로 실제수로는 구현할 수 없다. => 11, 001, 100 의 예시를 들어보자 => 3, 1, 4 => 위와 같이 뒤에서부터 3개씩 나누어 수를 8진수로 변환할 수 있다. => 4의 자리, 2의 자리, 1의 자리를 차례대로 곱하고 더하여 출력한다. *** string에 있는 숫자를 실제 숫자로 print하기 위해서 '0' 을 빼주고 계산한다. #include #include using namespace std; int main() { ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); string S; cin >> S; int len = S.length(); if(len%3 == 1) { cout
-
백준 17103 - 골드바흐 파티션백준 algorithm 2020. 3. 26. 19:55
=> 골드바흐의 수를 코딩할 줄 알면 풀 수 있는 문제이다. => check[1] = true를 해주지 않으면 틀리는 경우가 발생한다. => 중복을 제거하기 위해 find() 함수 아랫부분에 중복을 제거하였다. #include #include #include using namespace std; vector prime; bool check[1000001]; int cnt=0; void find(int A) { int IndexLimit=0; while(prime[IndexLimit]>tmp; find(tmp); cout
-
백준 1152 - 단어의 개수백준 algorithm 2020. 3. 18. 23:31
=> 공백이 포함된 string이므로 getline함수를 써야한다. => 예외처리를 신경써야하는 문제이다. 1. 맨앞이 ' ' 인 경우 2. 맨뒤가 ' '인 경우 3. 아무것도 없는 string을 받은 경우 4. 길이가 1인 string일 때, 문자 혹은 ' ' 가 있는 경우 더욱 간단하게 풀 방법이 있지만 직관적으로 보이게 하기 위해 코딩을 하였다. #include #include using namespace std; int main() { ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); string s; getline(cin,s); int cnt=0; int length = s.length(); if(length < 1) ..
-
백준 17087 - 숨바꼭질 6백준 algorithm 2020. 3. 18. 18:27
=> 나( S )가 갈 수 있는 곳은 ( S + D ) or ( S - D ) 이다. => 내가 Y에 가기 위해서는 Y-S 의 절대값이 D의 배수가 되어야한다. => 내가 Z에 가기 위해서는 Z-S 의 절대값이 D의 배수가 되어야한다. => 모든 Y-S , Z-S 값들의 최대 공약수를 구하면 된다. ex ) S : 3 동생들 위치 : 1 7 11 이 경우 최대공약수를 구해야할 수들은 2 4 8 가 된다. *** 배열을 사용할 때 잘못된 index에 접근하거나, 0으로 나누는 경우가 없도록 주의해야한다. (런타임 에러) #include #include #include #include using namespace std; long GCD (long A, long B) { while(B!=0) { long t..
-
백준 17299 - 오등큰수백준 algorithm 2020. 3. 18. 17:49
=> 오큰수와 같은 개념의 문제이다. https://codingham.tistory.com/77 백준 18298 - 오큰수 =>이해하는데 오래 걸린 문제이다. =>stack을 사용하여 푸는 문제이다. =>stack에 들어가는 숫자는 현재 오큰수를 찾지 못한 수의 idnex이다. =>현재 index에 들어있는 값이 stack의 top index에 해당하는 값보다.. codingham.tistory.com 위를 보면 오큰수를 구하는 코드를 알 수 있다. =>이 문제에서 본인은 세개의 배열을 써서 문제를 풀었다. => arr : 실제값을 입력받는 배열 arr2 : 각 숫자가 나온 횟수를 arr의 길이로 다시 만든 배열 cntarr : 각 element를 세는 배열 => 다른 사람들의 풀이를 보면 훨씬 간단하게..
-
백준 6588 - 골드바흐의 추측백준 algorithm 2020. 3. 16. 17:51
=> 에라토네스의 체를 사용할 수 있는 지를 묻는 문제이다. => 원하는 소수값을 찾기 위해서 본인과 같은 방법을 사용할 수 있다. => 또 다른 방법이 있다. 찾는 값 : 14 시작 점 : 3 14 - 3 = 11 이므로 11이 들어가 있는 index를 찾아가면 된다. 해당 방법이 본인이 푼 방법보다 훨씬 빠르게 풀 수 있는 방법이다. #include #include #include #include #include using namespace std; vector prime; bool check[1000001]; int answer[2]={-1}; void find(int A) { int IndexLimit=0; while(prime[IndexLimit]
-
백준 9613 - GCD 합백준 algorithm 2020. 3. 16. 00:44
=> 유클리드 호제법으로 최대공약수를 구할 수 있는 지에 대한 문제이다. => 유클리드 호제법 코드는 아래와 같다. int GCD (int A, int B) //function that find GCD { while(B!=0) { int tmp=B; B=A%B; A=tmp; } return A; } =>위 함수를 이용하고 가능한 모든 쌍을 해당 함수를 통해 값을 구하면 된다. *** 값의 범위가 int인지 long인지 정확히 인지할 필요가 있다. #include #include #include #include using namespace std; vector possiblePair; int GCD (int A, int B) //function that find GCD { while(B!=0) { int ..