๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ”ฅ PS(Problem Solving) ๐Ÿ”ฅ/programmers

[programmers] ์Šคํƒ/ํ, ํƒ‘

by dar0m! 2020. 6. 2.
 

์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์—ฐ์Šต - ํƒ‘

์ˆ˜ํ‰ ์ง์„ ์— ํƒ‘ N๋Œ€๋ฅผ ์„ธ์› ์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ํƒ‘์˜ ๊ผญ๋Œ€๊ธฐ์—๋Š” ์‹ ํ˜ธ๋ฅผ ์†ก/์ˆ˜์‹ ํ•˜๋Š” ์žฅ์น˜๋ฅผ ์„ค์น˜ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ฐœ์‚ฌํ•œ ์‹ ํ˜ธ๋Š” ์‹ ํ˜ธ๋ฅผ ๋ณด๋‚ธ ํƒ‘๋ณด๋‹ค ๋†’์€ ํƒ‘์—์„œ๋งŒ ์ˆ˜์‹ ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ, ํ•œ ๋ฒˆ ์ˆ˜์‹ ๋œ ์‹ ํ˜ธ๋Š” ๋‹ค

programmers.co.kr

 

๋ฌธ์ œ

์ˆ˜ํ‰ ์ง์„ ์— ํƒ‘ N๋Œ€๋ฅผ ์„ธ์› ์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ํƒ‘์˜ ๊ผญ๋Œ€๊ธฐ์—๋Š” ์‹ ํ˜ธ๋ฅผ ์†ก/์ˆ˜์‹ ํ•˜๋Š” ์žฅ์น˜๋ฅผ ์„ค์น˜ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ฐœ์‚ฌํ•œ ์‹ ํ˜ธ๋Š” ์‹ ํ˜ธ๋ฅผ ๋ณด๋‚ธ ํƒ‘๋ณด๋‹ค ๋†’์€ ํƒ‘์—์„œ๋งŒ ์ˆ˜์‹ ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ, ํ•œ ๋ฒˆ ์ˆ˜์‹ ๋œ ์‹ ํ˜ธ๋Š” ๋‹ค๋ฅธ ํƒ‘์œผ๋กœ ์†ก์‹ ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ๋†’์ด๊ฐ€ 6, 9, 5, 7, 4์ธ ๋‹ค์„ฏ ํƒ‘์ด ์™ผ์ชฝ์œผ๋กœ ๋™์‹œ์— ๋ ˆ์ด์ € ์‹ ํ˜ธ๋ฅผ ๋ฐœ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด, ํƒ‘์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์‹ ํ˜ธ๋ฅผ ์ฃผ๊ณ ๋ฐ›์Šต๋‹ˆ๋‹ค. ๋†’์ด๊ฐ€ 4์ธ ๋‹ค์„ฏ ๋ฒˆ์งธ ํƒ‘์—์„œ ๋ฐœ์‚ฌํ•œ ์‹ ํ˜ธ๋Š” ๋†’์ด๊ฐ€ 7์ธ ๋„ค ๋ฒˆ์งธ ํƒ‘์ด ์ˆ˜์‹ ํ•˜๊ณ , ๋†’์ด๊ฐ€ 7์ธ ๋„ค ๋ฒˆ์งธ ํƒ‘์˜ ์‹ ํ˜ธ๋Š” ๋†’์ด๊ฐ€ 9์ธ ๋‘ ๋ฒˆ์งธ ํƒ‘์ด, ๋†’์ด๊ฐ€ 5์ธ ์„ธ ๋ฒˆ์งธ ํƒ‘์˜ ์‹ ํ˜ธ๋„ ๋†’์ด๊ฐ€ 9์ธ ๋‘ ๋ฒˆ์งธ ํƒ‘์ด ์ˆ˜์‹ ํ•ฉ๋‹ˆ๋‹ค. ๋†’์ด๊ฐ€ 9์ธ ๋‘ ๋ฒˆ์งธ ํƒ‘๊ณผ ๋†’์ด๊ฐ€ 6์ธ ์ฒซ ๋ฒˆ์งธ ํƒ‘์ด ๋ณด๋‚ธ ๋ ˆ์ด์ € ์‹ ํ˜ธ๋Š” ์–ด๋–ค ํƒ‘์—์„œ๋„ ์ˆ˜์‹ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

์†ก์‹  ํƒ‘(๋†’์ด) ์ˆ˜์‹  ํƒ‘(๋†’์ด)
5(4) 4(7)
4(7) 2(9)
3(5) 2(9)
2(9) -
1(6) -

๋งจ ์™ผ์ชฝ๋ถ€ํ„ฐ ์ˆœ์„œ๋Œ€๋กœ ํƒ‘์˜ ๋†’์ด๋ฅผ ๋‹ด์€ ๋ฐฐ์—ด heights๊ฐ€ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์งˆ ๋•Œ ๊ฐ ํƒ‘์ด ์œ ์‹ ํ˜ธ๋ฅผ ์–ด๋Š ํƒ‘์—์„œ ๋ฐ›์•˜๋Š”์ง€ ๊ธฐ๋กํ•œ ๋ฐฐ์—ด์„ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์ž‘์„ฑํ•ด์ฃผ์„ธ์š”.

์ œํ•œ ์‚ฌํ•ญ

  • heights๋Š” ๊ธธ์ด 2 ์ด์ƒ 100 ์ดํ•˜์ธ ์ •์ˆ˜ ๋ฐฐ์—ด์ž…๋‹ˆ๋‹ค.
  • ๋ชจ๋“  ํƒ‘์˜ ๋†’์ด๋Š” 1 ์ด์ƒ 100 ์ดํ•˜์ž…๋‹ˆ๋‹ค.
  • ์‹ ํ˜ธ๋ฅผ ์ˆ˜์‹ ํ•˜๋Š” ํƒ‘์ด ์—†์œผ๋ฉด 0์œผ๋กœ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.

์ž…์ถœ๋ ฅ ์˜ˆ #1

heights return
[6,9,5,7,4] [0,0,2,2,4]
[3,9,9,3,5,7,2] [0,0,0,3,3,3,6]
[1,5,3,6,7,6,5] [0,0,2,0,0,5,6]

์ž…์ถœ๋ ฅ ์˜ˆ #2

[1,2,3] ๋ฒˆ์งธ ํƒ‘์ด ์œ ์‹ ํ˜ธ๋Š” ์•„๋ฌด๋„ ์ˆ˜์‹ ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
[4,5,6] ๋ฒˆ์งธ ํƒ‘์ด ์œ ์‹ ํ˜ธ๋Š” 3๋ฒˆ์งธ ํƒ‘์ด ์ˆ˜์‹ ํ•ฉ๋‹ˆ๋‹ค.
[7] ๋ฒˆ์งธ ํƒ‘์ด ์œ ์‹ ํ˜ธ๋Š” 6๋ฒˆ์งธ ํƒ‘์ด ์ˆ˜์‹ ํ•ฉ๋‹ˆ๋‹ค.

์ž…์ถœ๋ ฅ ์˜ˆ #3

[1,2,4,5] ๋ฒˆ์งธ ํƒ‘์ด ์œ ์‹ ํ˜ธ๋Š” ์•„๋ฌด๋„ ์ˆ˜์‹ ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
[3] ๋ฒˆ์งธ ํƒ‘์ด ์œ ์‹ ํ˜ธ๋Š” 2๋ฒˆ์งธ ํƒ‘์ด ์ˆ˜์‹ ํ•ฉ๋‹ˆ๋‹ค.
[6] ๋ฒˆ์งธ ํƒ‘์ด ์œ ์‹ ํ˜ธ๋Š” 5๋ฒˆ์งธ ํƒ‘์ด ์ˆ˜์‹ ํ•ฉ๋‹ˆ๋‹ค.
[7] ๋ฒˆ์งธ ํƒ‘์ด ์œ ์‹ ํ˜ธ๋Š” 6๋ฒˆ์งธ ํƒ‘์ด ์ˆ˜์‹ ํ•ฉ๋‹ˆ๋‹ค.

 

ํ•ด๊ฒฐ

  • ์ง๊ด€์ ์œผ๋กœ ๋งจ ์˜ค๋ฅธ์ชฝ ํƒ‘์—์„œ ๋ถ€ํ„ฐ ์‹ ํ˜ธ๊ฐ€ ๋ช‡ ๋ฒˆ์งธ ํƒ‘์œผ๋กœ ์ˆ˜์‹ ๋˜๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.
  • ์ด์ค‘ for๋ฌธ์„ ํ™œ์šฉํ•˜์—ฌ i ๋ฒˆ์งธ ํƒ‘์˜ ๋†’์ด pre๊ฐ€ heights[j]๋ณด๋‹ค ์ž‘๋‹ค๋ฉด
    • i ๋ฒˆ์งธ ํƒ‘์€ j ๋ฒˆ์งธ ํƒ‘์— ๋„๋‹ฌํ•œ๋‹ค.
    • ์ •๋‹ต์„ ์ฐพ์•˜์œผ๋ฉด flg = 1์ด ๋˜๊ณ , ์ •๋‹ต ๋ฆฌ์ŠคํŠธ์— ์ €์žฅ๋œ๋‹ค.
  • ๋งŒ์•ฝ ์•„๋ฌด๋Ÿฐ ํƒ‘์„ ์ฐพ์ง€ ๋ชปํ–ˆ๋‹ค๋ฉด ์ •๋‹ต ๋ฆฌ์ŠคํŠธ i ๋ฒˆ์งธ์— 0์ด ์ €์žฅ๋œ๋‹ค.
  • ๋งˆ์ง€๋ง‰์— ๋งจ ์˜ค๋ฅธ์ชฝ ๋ถ€ํ„ฐ ์ •๋‹ต ๋ฆฌ์ŠคํŠธ๋ฅผ ๊ตฌ์„ฑํ–ˆ์œผ๋ฏ€๋กœ reverse ํ•ด์„œ ๋ฐ˜ํ™˜ํ•ด์ฃผ๋ฉด ์ •๋‹ต์ด๋‹ค.

 

์ฝ”๋“œ

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
 
vector<int> solution(vector<int> heights) {
    vector<int> answer;
    int flg;
    for (int i = heights.size() - 1; i >= 0; i--) {
        int pre = heights[i]; flg = 0;
        for (int j = i - 1; j >= 0; j--) {
            if (heights[j] > pre) {
                answer.push_back(j+1);
                flg = 1;
                break;
            }
        }
        if (!flg) answer.push_back(0);
    }
    reverse(answer.begin(), answer.end());
    return answer;
}
cs

๋Œ“๊ธ€