https://school.programmers.co.kr/learn/courses/30/lessons/389478

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

 

생각 흐름 

  1. 2차원 배열을 만들어서 해당 칸에 박스가 있으면 true로 설정.
  2. 역방향으로 바꿔주고 그러는 게 너무 귀찮아서 폐기.
  3. num 위에 있는 박스의 숫자를 재귀적으로 구해보자. 즉, 예제 1에서 num 4이면 9를 구해보고, 그 다음에 16, ...
  4. 한 열에서 이전의 숫자로부터 일정한 패턴의 값이 더해지는 것을 발견.
  5. 나머지 열에 대해서도 따져보니 1부터 +2씩 w*2-1까지의 숫자들이 각 열마다 더해지는 것을 발견. 즉, 첫 열에서는 11, 두 번째 열에서는 9, ..., 마지막 열은 1

 

 

#include <vector>
#include <algorithm>

using namespace std;

vector<int> store;

int solution(int n, int w, int num) {
    int answer = 0;
    
    for(int i = 1; i<w*2; i+=2){
        store.push_back(i);
    }
    
    sort(store.rbegin(), store.rend());
    
    int floor = num/w - (num%w==0?1:0);
    
    int nextNum=num;
    while(nextNum<=n){
        int addNum;
        addNum = nextNum%w==0?w:nextNum%w;
        nextNum = nextNum+store[addNum-1];
        answer++;
        floor++;
    }
    
    return answer;
}

+ Recent posts