본문 바로가기

백준/C++

(128)
[C++] 백준 2442번 - 별 찍기 5 문제 2442번https://www.acmicpc.net/problem/2442 for문을 이용하여 줄마다 반복해주고 그 안에서 2개의 for문을 이용했다. 하나는 공백을, 다른 하나는 *을 조건에 맞게 출력해줬다. #include using namespace std;int main() { int N; cin >> N; for (int i = 1; i
[C++] 백준 2747번 - 피보나치 수 문제 2747번https://www.acmicpc.net/problem/2747 n번째 피보나치 수를 구하기 위해 1부터 n이 되기 전까지 반복문을 돌려줬다. 수를 두개씩 더해서 다음 수가 되는 거니까 1부터 시작하고, f2를 출력하도록 하였으니 1을 더 빼 n이 되기 전까지 반복되도록 한 것이다. sum 함수로 두 수를 더하는 함수를 만들었고 리턴값을 f2에 업데이트한다. 그리고 f1에는 업데이트 하기 전의 f2값을 넣어준다. 그렇게 반복문을 마치고 f2를 출력해주면 n번째 피보나치 수를 구할 수 있다. #include using namespace std;int n, f1 = 0, f2 = 1, temp;int sum(int a, int b) { return a + b;}int main() { cin ..
[C++] 백준 2441번 - 별 찍기 4 별 찍기 문제 중 안 풀어본 것이 있어서 풀어보려고 한다. 문제 2441번https://www.acmicpc.net/problem/2441 이중 반복문을 이용하면 되는데 1부터 시작하여 N까지 반복해준다. 그 안에서 1부터 i-1은 공백을 출력해주고, i부터 N까지는 *을 출력해준다. 그리고 한줄의 반복이 끝날 때마다 줄바꿈을 해주어 다음 반복을 실행한다.  #include using namespace std;int main() { int N; cin >> N; for (int i = 1; i
[C++] 백준 10872번 - 팩토리얼 문제 10872번https://www.acmicpc.net/problem/10872  N을 입력받고 N에서부터 1까지 반복문을 돌려 result에 곱해준다. 그러나 N이 0이라면 그대로 반복문을 빠져나와준다( 0!이 1이니까 result가 1인 상태를 출력). 여기서 result는 1로 초기화시켜준다(1로 해야 곱해줄 수 있기 때문).  #include using namespace std;int main() { int N, result = 1; cin >> N; for (int i = N; i > 0; i--) { if (N == 0) { break; } result *= i; } cout
[C++] 백준 1977번 - 완전제곱수 문제 1977번https://www.acmicpc.net/problem/1977  M이상 N이하의 자연수 중 완전제곱수인 것을 골라야하기 때문에 i를 1부터 i*i가 N보다 작거나 같을 때까지 반복해준다. 만약 i*i가 M보다 크거나 같다면 sum에 더해준다. 여기서 min이 아직 0이라면 가장 작은 첫번째 완전제곱근인 i*i를 min에 넣어준다. 그렇게 반복문을 마치고도 sum이 0이라면 완전제곱수가 없는 경우이기 때문에 -1를 출력해주고 아니라면 sum과 min을 출력해준다. #include using namespace std;int main() { int M, N, sum = 0, min = 0; cin >> M >> N; for (int i = 1; i * i = M) { if (min == ..
[C++] 12015번 - 가장 긴 증가하는 부분 수열 2 이 문제를 풀어야지 풀어야지 하다가 이제야 하게 되었다.그런데 잘 몰라서 다른 분의 풀이를 보고 공부한 후 내가 따로 작성해보았다. 문제 12015번https://www.acmicpc.net/problem/12015 일단 벡터에 입력값을 받아준다. 그런 후 수열을 저장할 벡터에 첫번째 값을 넣어준다. 1부터 N까지 반복문을 돌려주며 수열을 저장할 벡터(result) 마지막값과 입력값을 받아준 벡터(a) i번째 값을 비교해준다. 비교했을 때 a[i]가 마지막값보다 크면 그대로 그 값을 result에 포함시켜준다.  그러나 만약 a[i]가 마지막값보다 작거나 같으면 이분탐색을 이용하여 바꿔줄 값의 인덱스를 알아낸다(getIndex). -> result[mid]가 key(a[i])보다 크거나 같다면 right..
[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에 업데이트해주고, 사이클을 돌았다는 ..