문제
https://www.acmicpc.net/problem/1292
풀이
count_start 와 count_end 로 시작, 끝의 index를 입력받았다.
중첩 반복문을 사용해 설계했다.
바깥 반복문의 변수 i는 수열에 들어가는 수를 담당했다. 안쪽 반복문의 변수 j는 i가 수열에 들어가는 횟수를 담당했다.
별도의 변수 count가 1부터 증가하며 몇 번째 수인지 세었다.
바깥 반복문에서 변수 i는 1부터 1씩 증가하며 수행되었고, i와는 상관없이 총 수행횟수를 세는 count 변수가 입력받은 count_end 변수보다 작거나 같은동안 수행되었다.
안쪽 반복문에서 변수 j는 1부터 1씩 증가하며 수행되었고, 바깥 반복문의 변수 i 보다 작거나 같은 동안, 그리고 count 변수가 count_end 변수보다 작거나 같은동안 수행되었다.
소스코드
#include <iostream>
using namespace std;
int main()
{
int count_start;
int count_end;
cin >> count_start >> count_end;
int count = 1;
int sum_btw = 0;
for(int i=1; count <= count_end; i++)
{
for(int j=1; j<=i && count <= count_end; j++)
{
if(count_start <= count && count <= count_end) {
sum_btw += i;
}
count++;
}
}
cout << sum_btw << endl;
return 0;
}
발전
for 반복문의 인덱스를 담당하는 변수 i와 관계없는 count 변수를 종료조건으로 사용하는 아이디어가 필요했던 문제였다.
문제가 어려워질수록, 무작정 풀기보다는 단계를 나누어 풀어보는 것이 필요한 것 같다.
일단 그냥 무작정 풀긴 했지만, 단계를 나눠보자면
1. 다음과 같은 규칙의 수열 1 2 2 3 3 3 4 4 4 4 5 ... 를 출력해본다 (중첩 for문이 이용될 것이다)
2. 입력받은 범위 count_start와 count_end 사이 번째의 수를 더한다 (수행횟수(인덱스)를 세어주는 변수 count가 필요할 것이다)
정도로 나눠볼 수 있겠다.
'Problem Solving' 카테고리의 다른 글
[백준/BO] 2822. NAJBOLJIH 5 (C++) (0) | 2024.05.29 |
---|---|
[백준/BOJ] 2592. 대표값 (C++) (0) | 2024.05.22 |
[백준/BOJ] 10162. 전자레인지 (C++) (0) | 2024.05.14 |
[백준/BOJ] 5063. Nasty Hacks (C++) (0) | 2024.05.14 |
[백준/BOJ] 5717. Og (C++) (0) | 2024.05.14 |