[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ํ–‰๋ ฌ ํ…Œ๋‘๋ฆฌ ํšŒ์ „ํ•˜๊ธฐ

2021. 7. 16. 16:51ใ†ETC/Algorithm

๐Ÿ‘Š๐Ÿป ๋ฌธ์ œ

rows x columns ํฌ๊ธฐ์ธ ํ–‰๋ ฌ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ํ–‰๋ ฌ์—๋Š” 1๋ถ€ํ„ฐ rows x columns๊นŒ์ง€์˜ ์ˆซ์ž๊ฐ€ ํ•œ ์ค„์”ฉ ์ˆœ์„œ๋Œ€๋กœ ์ ํ˜€์žˆ์Šต๋‹ˆ๋‹ค. ์ด ํ–‰๋ ฌ์—์„œ ์ง์‚ฌ๊ฐํ˜• ๋ชจ์–‘์˜ ๋ฒ”์œ„๋ฅผ ์—ฌ๋Ÿฌ ๋ฒˆ ์„ ํƒํ•ด, ํ…Œ๋‘๋ฆฌ ๋ถ€๋ถ„์— ์žˆ๋Š” ์ˆซ์ž๋“ค์„ ์‹œ๊ณ„๋ฐฉํ–ฅ์œผ๋กœ ํšŒ์ „์‹œํ‚ค๋ ค ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ ํšŒ์ „์€ (x1, y1, x2, y2)์ธ ์ •์ˆ˜ 4๊ฐœ๋กœ ํ‘œํ˜„ํ•˜๋ฉฐ, ๊ทธ ์˜๋ฏธ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • x1 ํ–‰ y1 ์—ด๋ถ€ํ„ฐ x2 ํ–‰ y2 ์—ด๊นŒ์ง€์˜ ์˜์—ญ์— ํ•ด๋‹นํ•˜๋Š” ์ง์‚ฌ๊ฐํ˜•์—์„œ ํ…Œ๋‘๋ฆฌ์— ์žˆ๋Š” ์ˆซ์ž๋“ค์„ ํ•œ ์นธ์”ฉ ์‹œ๊ณ„๋ฐฉํ–ฅ์œผ๋กœ ํšŒ์ „ํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ์€ 6 x 6 ํฌ๊ธฐ ํ–‰๋ ฌ์˜ ์˜ˆ์‹œ์ž…๋‹ˆ๋‹ค.

 

์ด ํ–‰๋ ฌ์— (2, 2, 5, 4) ํšŒ์ „์„ ์ ์šฉํ•˜๋ฉด, ์•„๋ž˜ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด 2ํ–‰ 2์—ด๋ถ€ํ„ฐ 5ํ–‰ 4์—ด๊นŒ์ง€ ์˜์—ญ์˜ ํ…Œ๋‘๋ฆฌ๊ฐ€ ์‹œ๊ณ„๋ฐฉํ–ฅ์œผ๋กœ ํšŒ์ „ํ•ฉ๋‹ˆ๋‹ค. ์ด๋•Œ, ์ค‘์•™์˜ 15์™€ 21์ด ์žˆ๋Š” ์˜์—ญ์€ ํšŒ์ „ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์„ ์ฃผ์˜ํ•˜์„ธ์š”.

 

 

ํ–‰๋ ฌ์˜ ์„ธ๋กœ ๊ธธ์ด(ํ–‰ ๊ฐœ์ˆ˜) rows, ๊ฐ€๋กœ ๊ธธ์ด(์—ด ๊ฐœ์ˆ˜) columns, ๊ทธ๋ฆฌ๊ณ  ํšŒ์ „๋“ค์˜ ๋ชฉ๋ก queries๊ฐ€ ์ฃผ์–ด์งˆ ๋•Œ, ๊ฐ ํšŒ์ „๋“ค์„ ๋ฐฐ์—ด์— ์ ์šฉํ•œ ๋’ค, ๊ทธ ํšŒ์ „์— ์˜ํ•ด ์œ„์น˜๊ฐ€ ๋ฐ”๋€ ์ˆซ์ž๋“ค ์ค‘ ๊ฐ€์žฅ ์ž‘์€ ์ˆซ์ž๋“ค์„ ์ˆœ์„œ๋Œ€๋กœ ๋ฐฐ์—ด์— ๋‹ด์•„ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•ด์ฃผ์„ธ์š”.

 

 

์ œํ•œ์‚ฌํ•ญ

  • rows๋Š” 2 ์ด์ƒ 100 ์ดํ•˜์ธ ์ž์—ฐ์ˆ˜์ž…๋‹ˆ๋‹ค.
  • columns๋Š” 2 ์ด์ƒ 100 ์ดํ•˜์ธ ์ž์—ฐ์ˆ˜์ž…๋‹ˆ๋‹ค.
  • ์ฒ˜์Œ์— ํ–‰๋ ฌ์—๋Š” ๊ฐ€๋กœ ๋ฐฉํ–ฅ์œผ๋กœ ์ˆซ์ž๊ฐ€ 1๋ถ€ํ„ฐ ํ•˜๋‚˜์”ฉ ์ฆ๊ฐ€ํ•˜๋ฉด์„œ ์ ํ˜€์žˆ์Šต๋‹ˆ๋‹ค.
    • ์ฆ‰, ์•„๋ฌด ํšŒ์ „๋„ ํ•˜์ง€ ์•Š์•˜์„ ๋•Œ, i ํ–‰ j ์—ด์— ์žˆ๋Š” ์ˆซ์ž๋Š” ((i-1) x columns + j)์ž…๋‹ˆ๋‹ค.
  • queries์˜ ํ–‰์˜ ๊ฐœ์ˆ˜(ํšŒ์ „์˜ ๊ฐœ์ˆ˜)๋Š” 1 ์ด์ƒ 10,000 ์ดํ•˜์ž…๋‹ˆ๋‹ค.
  • queries์˜ ๊ฐ ํ–‰์€ 4๊ฐœ์˜ ์ •์ˆ˜ [x1, y1, x2, y2]์ž…๋‹ˆ๋‹ค.
    • x1 ํ–‰ y1 ์—ด๋ถ€ํ„ฐ x2 ํ–‰ y2 ์—ด๊นŒ์ง€ ์˜์—ญ์˜ ํ…Œ๋‘๋ฆฌ๋ฅผ ์‹œ๊ณ„๋ฐฉํ–ฅ์œผ๋กœ ํšŒ์ „ํ•œ๋‹ค๋Š” ๋œป์ž…๋‹ˆ๋‹ค.
    • 1 ≤ x1 < x2 ≤ rows, 1 ≤ y1 < y2 ≤ columns์ž…๋‹ˆ๋‹ค.
    • ๋ชจ๋“  ํšŒ์ „์€ ์ˆœ์„œ๋Œ€๋กœ ์ด๋ฃจ์–ด์ง‘๋‹ˆ๋‹ค.
    • ์˜ˆ๋ฅผ ๋“ค์–ด, ๋‘ ๋ฒˆ์งธ ํšŒ์ „์— ๋Œ€ํ•œ ๋‹ต์€ ์ฒซ ๋ฒˆ์งธ ํšŒ์ „์„ ์‹คํ–‰ํ•œ ๋‹ค์Œ, ๊ทธ ์ƒํƒœ์—์„œ ๋‘ ๋ฒˆ์งธ ํšŒ์ „์„ ์‹คํ–‰ํ–ˆ์„ ๋•Œ ์ด๋™ํ•œ ์ˆซ์ž ์ค‘ ์ตœ์†Ÿ๊ฐ’์„ ๊ตฌํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

 

์‹คํ–‰ ์˜ˆ์‹œ

 

 

 

๐ŸŽƒ ๋ฌธ์ œ ํ•ด๊ฒฐ

ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

โœ”๏ธ ์ขŒ์ธก ์ƒ๋‹จ์˜ ์ง€์ ์„ ์ฒซ ์‹œ์ž‘์  ๐Ÿ‘‰๐Ÿป๋”ฐ๋กœ ์ €์žฅ (tmp ๋ณ€์ˆ˜)

โœ”๏ธ ↓→↑← ์˜ ์ˆœ์„œ๋กœ ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ + ์ˆœํšŒ (min๊ฐ’ ์ฐพ๊ธฐ)

โœ”๏ธ min ๊ฐ’์„ ์ตœ์ข… ๋‹ต ๋ฐฐ์—ด์— ์ถ”๊ฐ€

 

 

์ฝ”๋“œ

#include <string>
#include <vector>

using namespace std;

void comp(int &min,int n) {
    min = min > n ? n : min;
}

vector<int> solution(int rows, int columns, vector<vector<int>> queries) {
    vector<int> answer;
    vector<vector<int>> board(rows, vector<int>(columns));
    
    for (int i = 0; i < rows; i++)
        for (int j = 0; j < columns; j++)
            board[i][j] = (i * columns) + (j + 1);
    
    for (vector<int> q: queries) {
        int x1 = q[0]-1, y1 = q[1]-1, x2 = q[2]-1, y2 =q[3]-1;
        int x=x1, y = y1, tmp = board[x][y];
        int min = tmp;
        
        for (;x < x2;x++) {
            comp(min, board[x][y]);
            board[x][y] = board[x+1][y];
        }
        for (;y < y2;y++) {
            comp(min, board[x][y]);
            board[x][y] = board[x][y+1];
        }
        for (;x != x1;--x) {
            comp(min, board[x][y]);
            board[x][y] = board[x-1][y];
        }
        for (;y != y1;--y) {
            comp(min, board[x][y]);
            board[x][y] = board[x][y-1];
        }
        board[x][y+1] = tmp;
        answer.push_back(min);
    }

    return answer;
}