본문 바로가기

백준/C++

(130)
[C++] 백준 1357번 - 뒤집힌 덧셈 문제 1357번https://www.acmicpc.net/problem/1357 string타입으로 입력받은 값을 reverse로 뒤집어준다. 각각을 더하기 위해 stoi를 통해 int타입으로 변경해준다. 더한 값을 int타입 변수에 저장하고 해당 값을 또 뒤집기 위해 to_string을 사용하여 string 타입으로 변환시킨다. reverse로 뒤집은 후 최종값을 stoi로 int타입으로 만들고 출력해준다. 여기서 int타입으로 변환시키는 이유는 string타입으로 한다면 10같은 숫자가 최종값일 때 뒤집으면 01이 되므로 0을 없애기 위한 것이다. #include #include #include using namespace std;int main() { string x, y, s_sum; int su..
[C++] 백준 1110번 - 더하기 사이클 문제 1110번https://www.acmicpc.net/problem/1110 일단 원래 숫자를 origin변수에 저장해둔다. 그리고 반복문을 돌릴 때 n이 원래 숫자랑 같지 않을 때까지 반복해준다. 여기서 그냥 while문을 사용한다면 바로 반복문을 빠져나오게 되기 때문에 1번은 무조건 실행하고 조건문을 확인하는 do~while문을 사용해준다. 다음의 일의 자리에 있던 숫자를 십의 자리로 표현해주기 위해 n을 10으로 나눈 나머지에 10을 곱해준다. 여기에 n의 십의 자리와 일의 자리를 더한 값의 일의 자리를 더해줘야한다. 이 값을 구하기 위해 n에서 10을 나눈 몫과 n에 10을 나눈 나머지를 더한 후 10을 나눈 나머지를 구한다. 이렇게 두 수를 더한 값을 n에 업데이트해주고, 사이클을 돌았다는 ..
[C++] 백준 16496번 - 큰 수 만들기 문제 16496번https://www.acmicpc.net/problem/16496 문제를 풀다가 이런 식의 문제가 없을까해서 찾아보니 '큰 수 만들기'라는 문제가 있었다. 한자리수면 그냥 비교하면 되지만 한자리를 넘어가면 맨 앞부터 차례로 비교해줘야 한다. 그러기 위해서 string으로 입력을 받았다. sort를 이용하여 정렬을 하는데 합쳤을 때 더 큰 수인지 확인하는 함수를 구현한다. 정렬한 후 해당 값을 하나의 변수에 저장하고, 정렬했는데도 맨 앞이 0이면 0이 정답이기 때문에 0을 출력해준다. 그게 아니라면 그 result를 그대로 출력하면 된다. #include #include #include #include using namespace std;int N;vector num;bool compar..
[C++] 백준 1292번 - 쉽게 푸는 문제 문제 1292번https://www.acmicpc.net/problem/1292 배열에 1부터 1000까지 규칙에 맞게 담기 위해 i를 1부터 1000까지 반복해준다. 그리고 j를 이용해 1이면 1개만 2면 2개만 담을 수 있도록 만든다. 여기서 배열의 인덱스로 1부터 시작하는 n변수를 만든다. 그렇게 j부분의 반복문을 실행할 때마다 인덱스를 하나 증가시켜주는 것이다. j부분의 반복문을 다시 시작할 때 n이 1000을 넘는지 확인하여 범위가 넘지 않도록 주의해준다. 배열에 값을 다 넣어주면 마지막으로 A번째 숫자부터 B번째 숫자까지 반복문을 이용해 더해주어 해당 값을 출력해주면 된다. #include using namespace std;int main() { int A, B, n = 1; int num[..
[C++] 백준 2805번 - 나무 자르기 문제 2805번https://www.acmicpc.net/problem/2805  이 문제도 높이의 최댓값을 구하라는 것을 보니 이분탐색을 사용하면 되겠다. 벡터에 나무 길이를 모두 저장하고 start와 end를 이용하여 mid값을 정한다. mid는 높이를 나타낸다. 그래서 이 값보다 나무 길이가 더 크면 mid만큼 빼주고 total에 더해준다. 만약 그 total이 m보다 작다면 mid값을 줄여야하기 때문에 end를 mid-1위치로 옮긴다. 그 반대라면 result에 mid값을 저장해두고 start를 mid+1위치에 옮겨준다. #include #include using namespace std;int n, m;vector tree;int main() { cin >> n >> m; for (int i =..
[C++] 백준 13241번 - 최소공배수 문제 13241번https://www.acmicpc.net/problem/13241 A와 B를 곱한 값에 최대공약수를 나눠주면 최소공배수를 구할 수 있다. 이를 위해 유클리드 알고리즘을 이용하여 주어진 두 수 사이에 존재하는 최대공약수(gcd)를 구한다. a,b가 주어졌을 때(a가 더 큼) 뒷부분이 0일 때 앞 부분이 최대공약수가 된다. 만약 0이 아니라면 a에 b값을 넣고 b에 a%b값을 넣은 후 다시 반복해준다. #include using namespace std;long long gcd(long long a, long long b) { if (b == 0){ return a; } else{ return gcd(b, a % b); }}int main() { long..
[C++ 실패하고... 파이썬] 백준 13706번 - 제곱근 문제 13706번https://www.acmicpc.net/problem/13706 // 시간 초과 코드#include using namespace std;int main() { int N; cin >> N; int s = 1, e = N, result; while (s N) { e = mid - 1; } else { s = mid + 1; } } return 0;}  이번 문제.. 쉽게 풀 수 있을 줄 알았는데 N이 800자 이하고 C++은 bigInteger를 지원하지 않는다고 한다.어떻게 풀지 계속 고민하고 검색하다가 머리가 너무 아파서 파이썬은 사기적으로 풀 수 있다길래 한번 파이썬으로 풀어보기로 했다.... import math N = int(input()) print(math.i..
[C++] 백준 2417번 - 정수 제곱근 문제 2417번https://www.acmicpc.net/problem/2417 이번 문제는 문제에 있는 그대로 코드를 작성하니 금방 풀렸다. 'n에 루트를 씌운 q'의 제곱이 n보다 작다면 q를 하나 더 키워준다. #include #include using namespace std;int main() { long long n, q; cin >> n; q = sqrt(n); if (q * q