관리 메뉴

cococo-coding

5054번. 주차의 신 (c++풀이) 본문

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

5054번. 주차의 신 (c++풀이)

_dani 2023. 12. 8. 08:54

최종코드

총 2가지 버전으로 풀었다.

1번처럼 변수를 반복문으로 돌리는 방법과 2번처럼 배열로 인덱스마다 변수를 넣는 방식이다. 

 

1. 상점위치를 각각 입력받기 (하나의 변수로 돌려막기)

#include <iostream>
#include <string>
using namespace std;

int main() {
    //1. 테스트케이스t를 입려받는다
    //2. 각 테스트케이스의 상점수n과 상점위치를 입력받는다.
    //3. 거리의 최솟값을 구한다.
    //4. 최솟값을 출력한다. 

    //1
    int t=0;
    cin >> t;

    //2
    while(t--){
        int min=100, max=-1; //max min초기화 
        int n=0, road=0, input=0;
        
        cin >> n;
        for(int j=0; j<n; j++){
            cin >> input;      
        //가장 먼 상점과 가장 가까운 상점 구하기
           if(input<min)
               min=input;
           if(input>max)
               max=input;  
        }
        //3
        //cout << max << ' ' <<min << endl;
        road=(max-min)*2;
        cout << road << endl;
    }
    return 0;
}

2. 배열로 상점위치 입력받기

#include <iostream>
#include <string>
using namespace std;

int main() {
    //배열 ver
    //1. 테스트케이스t를 입려받는다
    //2. 각 테스트케이스의 상점수n과 상점위치를 입력받는다.
    //3. 거리의 최솟값을 구한다.
    //4. 최솟값을 출력한다. 

    //1
    int t=0;
    cin >> t;

    //2
    while(t--){ 
        int min=100, max=-1; //max min초기화 
        int n=0, road=0;
        int arr[20]={0,};
        
        cin >> n;
        for(int j=1; j<=n; j++){
            cin >> arr[j];     
        //가장 먼 상점과 가장 가까운 상점 구하기
           if(arr[j]<min)
               min=arr[j];
           if(arr[j]>max)
               max=arr[j];  
        }
        //3
        //cout << max << ' ' <<min << endl;
        road=(max-min)*2;
        cout << road << endl;
    }
    return 0;
}

처음에는 바로 배열방식으로 풀다가 계속 에러가 나서 1번처럼 풀고, 성공한 후에 배열방식을 시도했다.

 

여기서 놓친 점이 하나 있다면

if-else반복문 구조에서 

if - else if - else 이 구조로 쓰는데 

나는 else를 빼고 그냥 if - else if로 썼더니 계속 오류가 났다. 

그래서 위의 코드처럼 if 문을 하나씩 넣어줬더니 바로 성공했다ㅠㅠ

이 부분 놓치지 말자!

 

2023.12.08