관리 메뉴

cococo-coding

*1292번. 쉽게 푸는 문제 (c++풀이) 본문

[BOJ] 코드 모음/C++_learning 문제집

*1292번. 쉽게 푸는 문제 (c++풀이)

_dani 2023. 12. 6. 18:43

최종 코드

#include <iostream>
using namespace std;

int main() {
    //1. 구간의 시작과 끝을 입력받는다.
    //2. 구간에 속하는 숫자의 합을 구한다.
    //3. 합을 출력한다.

    //1
    int arr[1001]={0,};
    int start=0, end=0;

    //2
    int k=1;
    for(int i=1; i<1001; i++){ //1000번 반복
        for(int j=1; j<=i; j++){
            if(k>1000){
                break;
            }
            arr[k]=i; //헷갈렸던 부분
             k++;
            //cout << "arr의 k는 " << k << " arr[k]의 값은 " << arr[k] << endl;
        }
    }

    //3
    int sum=0;
    cin >> start >> end;
    for(int i=start; i<=end; i++){
        sum+=arr[i];
    }
    cout << sum << endl;
   
    return 0;
}

2번 부분에서 arr[k]=i; 코드를 짜는 게 굉장히 헷갈렸다.

이중포문을 사용하면 대부분 그 포문의 i나 j로 arr배열에 넣는 게 보편적인데, 새로운 변수 k=1을 미리 초기화해두고 이 k를 쓴다는 방법이 신선했다. 

그리고 arr[k]는 내가 원하는 대로 출력이 되는데 그 안에 들어가는 값이 또 문제였다. 

처음에는 똑같이 arr[k]=k도 해보고, arr[k]=j도 해봤는데 다 틀려서 설마 i인가 하고 넣었더니 이게 맞았다. 

i는 1, 22, 333, 이런식으로 변하지 않는 부분이니 변화폭이 제일 적은 겉의for문 변수를 사용한다고 생각하면 편하다. 

 

3번에서는 for(int i=1; i<1001; i++)로 잡고, i>=start && i<=end 로 조건을 달아서 sum에 누적시켰는데

저 위의 코드대로 하는 게 휠씬 보기도 좋고 코드도 짧아진다. 

 

2023.12.06