티스토리 뷰

[6730] : 장애물 경주 난이도

  • 입력 : 블록의 높이들 → 고정된 값이고, 삽입 삭제가 일어나지 않을 예정이므로 배열(: blocks)을 사용
  • 출력 : 1) 올라갈 때 가장 심한 높이 변화 2) 내려갈 떄 가장 심한 높이 변화
  • 전략
    • blocks[i - 1]과 blocks[i]를 비교해서 up인지 down인지 판별
    • 방금 비교한 up / down이 maxUp / maxDown 보다 큰지 판별해서 업데이트
#include <iostream>
using namespace std;

int main(void){
    int testCase;
    cin >> testCase;
    for(int t = 0; t < testCase; t++){
        int blockCount; // 주어질 block의 개수
        cin >> blockCount;
        // blocks 배열 동적 할당
        int *blocks = new int[blockCount];
        
        for(int b = 0; b < blockCount; b++)
            cin >> blocks[b];
        
        // up : 몇 칸 올라갔는가 && down : 몇 칸 내려갔는가
        // maxUp, maxDown : 가장 심한 높이 변화
        int up, down, maxUp = 0, maxDown = 0;
        for(int i = 1; i < blockCount; i++){
        	// UP
            if(blocks[i] > blocks[i - 1]){
                up = blocks[i] - blocks[i - 1];
                // maxUp 업데이트
                if (up > maxUp)
                    maxUp = up;
            }
            // DOWN
            else{
                down = blocks[i - 1] - blocks[i];
                // maxDown 업데이트
                if(down > maxDown)
                    maxDown = down;
            }
        }
        cout << "#" << t + 1 << " " << maxUp << " " << maxDown << endl;
    }
    return 0;
}

 

[6718] : 희성이의 원근법

  • 입력 : 대체 값으로 바꿀 거리(m) → 문제는 km로 주어진 것이므로 단위에 유의
  • 출력 : 대체 값
  • 전략
    • 이 문제는 코드가 문제가 아니라 시간 초과가 문제다. 속도가 발목을 잡는다면 io를 손 좀 봐주면 된다. stackoverflow에 따르면 iostream이 컴퓨터 하드보다 느리다던데....? cout cin endl을 printf, scanf, \n으로 고쳐주면 아마 다 PASS하지 않을까 싶은데?
#include <iostream>
using namespace std;

int main(void){
    int testCase;
    scanf("%d", &testCase);
    for(int test = 1; test <= testCase; test++){
        int distance, convertDist;
        scanf("%d", &distance);
        
        if( distance < 100 ) convertDist = 0;
        else if( distance < 1000 ) convertDist = 1;
        else if( distance < 10000 ) convertDist = 2;
        else if( distance < 100000 ) convertDist = 3;
        else if( distance < 1000000 ) convertDist = 4;
        else convertDist = 5;

        printf("#%d %d\n", test, convertDist);
    }
    return 0;
}

 

[6692] : 다솔이의 월급 상자

아니 누가 월급을 상자에다가 랜덤으로 줘 문제 진짜ㅋㅋㅋ

  • 입력 : 확률, 급여(만원) (그 급여일 확률이 주어지는 셈)
  • 출력 : 월급의 평균
  • 전략
    • 문이과 상관없이 고등학교 통계를 했다면 E(x) = Σ pᵢxᵢ 라는 사실을 알테고, 코드는 전혀문제가 아니니... 왜 D3에 있는지 모르겠는 감사한 문제
    • 그치만 c++을 쓴다면 <iomanip>에서 fixed와 setprecision 하는 것을 잊으면 안된다.
#include<iostream>
#include<iomanip>
using namespace std;

int main(void){
    int testCase;
    cin >> testCase;
    for(int test = 1; test <= testCase; test++){
        int cases;
        double sum = 0.0;
        cin >> cases;
        for(int c = 0; c < cases; c++){
            double prob;
            int pay;
            cin >> prob >> pay;
            sum += prob * pay;
        }
        cout << "#" << test << " " << fixed << setprecision(6) << sum << endl;
    }
    return 0;
}

 

 

[6485] : 삼성시의 버스 노선

이 문제는 진짜 출제한 사람의 기억 지우고 풀어보라고 해야된다... 입력 값 설명을 좀... 후....(불만 불만)

  • 입력 : 버스 노선들이 지나가는 버스정류장 최소, 최대 값(A, B), 알아볼 정류장 수(P), 정류장 번호(C)
  • 출력 : Cᵢ 정류장을 지나는 버스 노선 개수
  • 전략
    • 정류장은 5000개로 고정이므로 배열을 사용 → 정류장 번호는 1 부터 시작하므로 배열()의 크기는 5001로 한다.
#include <iostream>

using namespace std;
int testCase;
int busStop[5001];

// 한 번의 testCase가 끝나면 busStop[i] 0으로 초기화
void initializeBusStop(int*);

int main(void){
    cin >> testCase;
    for(int test = 1; test <= testCase; test++){
        initializeBusStop(busStop);
        int tc;
        cin >> tc;
        for(int i = 0; i < tc; i++){
            int Ai, Bi;
            cin >> Ai >> Bi;
            for(int stop = Ai; stop <= Bi; stop++){
                busStop[stop]++; // 해당 정류장 지나면 증감
            }
        }
        int P; // 알아볼 정류장 개수
        cin >> P;
        int *stops = new int[P]; // 정류장 번호 저장(C 값들 저장)
        for(int w = 0; w < P; w++)
            cin >> stops[w];
        cout << "#" << test << " ";
        for(int w = 0; w <P; w++)
            cout << busStop[stops[w]] << " ";
        cout << endl;
    }
    return 0;
}

void initializeBusStop(int *arr){
    for(int i = 0; i < 5000; i++){
        arr[i] = 0;
    }
}

'CS > 알고리즘' 카테고리의 다른 글

[SWEA] D3 : 5948, 5789, 5549  (0) 2019.07.24
[SWEA] D3 : 6190, 6057, 6019, 5986  (0) 2019.07.24
[C++] Array 와 Vector 한 방에 비교하기  (1) 2019.06.24
[SWEA] D2 : 1970, 1979, 1974, 1983  (0) 2019.06.16
[SWEA] D2 : 1859, 1948, 1959, 1966  (0) 2019.06.16
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함