[programmers] ํƒ๋ฐฐ์ƒ์ž - Java

ํƒ๋ฐฐ์ƒ์ž๋ฅผ ํŠธ๋Ÿญ์— ์‹ค์–ด์•ผ ํ•˜๋Š” ๋ฌธ์ œ์—์„œ, ์˜์žฌ๋Š” ์ปจํ…Œ์ด๋„ˆ ๋ฒจํŠธ์—์„œ ์ƒ์ž๋ฅผ ์›ํ•˜๋Š” ์ˆœ์„œ๋กœ ์‹ค์–ด์•ผ ํ•˜๋ฉฐ, ๋ณด์กฐ ์ปจํ…Œ์ด๋„ˆ ๋ฒจํŠธ๋ฅผ ์ด์šฉํ•ด ์ƒ์ž๋ฅผ ์ž„์‹œ๋กœ ๋ณด๊ด€ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ฃผ์–ด์ง„ ์ˆœ์„œ์— ๋งž์ถฐ ๋ช‡ ๊ฐœ์˜ ์ƒ์ž๋ฅผ ์„ฑ๊ณต์ ์œผ๋กœ ์‹ค์„ ์ˆ˜ ์žˆ๋Š”์ง€๋ฅผ ๊ณ„์‚ฐํ•˜๋Š” Java ์†”๋ฃจ์…˜์„ ์ œ๊ณตํ•˜๋ฉฐ, ์Šคํƒ์„ ํ™œ์šฉํ•˜์—ฌ ์ƒ์ž๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•œ๋‹ค.
DriedPollack's avatar
Oct 21, 2024
[programmers] ํƒ๋ฐฐ์ƒ์ž - Java

ํƒ๋ฐฐ์ƒ์ž

๋ฌธ์ œ ์„ค๋ช…

์˜์žฌ๋Š” ํƒ๋ฐฐ์ƒ์ž๋ฅผ ํŠธ๋Ÿญ์— ์‹ฃ๋Š” ์ผ์„ ํ•ฉ๋‹ˆ๋‹ค. ์˜์žฌ๊ฐ€ ์‹ค์–ด์•ผ ํ•˜๋Š” ํƒ๋ฐฐ์ƒ์ž๋Š” ํฌ๊ธฐ๊ฐ€ ๋ชจ๋‘ ๊ฐ™์œผ๋ฉฐ 1๋ฒˆ ์ƒ์ž๋ถ€ํ„ฐ n๋ฒˆ ์ƒ์ž๊นŒ์ง€ ๋ฒˆํ˜ธ๊ฐ€ ์ฆ๊ฐ€ํ•˜๋Š” ์ˆœ์„œ๋Œ€๋กœ ์ปจํ…Œ์ด๋„ˆ ๋ฒจํŠธ์— ์ผ๋ ฌ๋กœ ๋†“์—ฌ ์˜์žฌ์—๊ฒŒ ์ „๋‹ฌ๋ฉ๋‹ˆ๋‹ค. ์ปจํ…Œ์ด๋„ˆ ๋ฒจํŠธ๋Š” ํ•œ ๋ฐฉํ–ฅ์œผ๋กœ๋งŒ ์ง„ํ–‰์ด ๊ฐ€๋Šฅํ•ด์„œ ๋ฒจํŠธ์— ๋†“์ธ ์ˆœ์„œ๋Œ€๋กœ(1๋ฒˆ ์ƒ์ž๋ถ€ํ„ฐ) ์ƒ์ž๋ฅผ ๋‚ด๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ปจํ…Œ์ด๋„ˆ ๋ฒจํŠธ์— ๋†“์ธ ์ˆœ์„œ๋Œ€๋กœ ํƒ๋ฐฐ์ƒ์ž๋ฅผ ๋‚ด๋ ค ๋ฐ”๋กœ ํŠธ๋Ÿญ์— ์‹ฃ๊ฒŒ ๋˜๋ฉด ํƒ๋ฐฐ ๊ธฐ์‚ฌ๋‹˜์ด ๋ฐฐ๋‹ฌํ•˜๋Š” ์ˆœ์„œ์™€ ํƒ๋ฐฐ์ƒ์ž๊ฐ€ ์‹ค๋ ค ์žˆ๋Š” ์ˆœ์„œ๊ฐ€ ๋งž์ง€ ์•Š์•„ ๋ฐฐ๋‹ฌ์— ์ฐจ์งˆ์ด ์ƒ๊น๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ํƒ๋ฐฐ ๊ธฐ์‚ฌ๋‹˜์ด ๋ฏธ๋ฆฌ ์•Œ๋ ค์ค€ ์ˆœ์„œ์— ๋งž๊ฒŒ ์˜์žฌ๊ฐ€ ํƒ๋ฐฐ์ƒ์ž๋ฅผ ์‹ค์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
๋งŒ์•ฝ ์ปจํ…Œ์ด๋„ˆ ๋ฒจํŠธ์˜ ๋งจ ์•ž์— ๋†“์ธ ์ƒ์ž๊ฐ€ ํ˜„์žฌ ํŠธ๋Ÿญ์— ์‹ค์–ด์•ผ ํ•˜๋Š” ์ˆœ์„œ๊ฐ€ ์•„๋‹ˆ๋ผ๋ฉด ๊ทธ ์ƒ์ž๋ฅผ ํŠธ๋Ÿญ์— ์‹ค์„ ์ˆœ์„œ๊ฐ€ ๋  ๋•Œ๊นŒ์ง€ ์ž ์‹œ ๋‹ค๋ฅธ ๊ณณ์— ๋ณด๊ด€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๊ณ ๊ฐ์˜ ๋ฌผ๊ฑด์„ ํ•จ๋ถ€๋กœ ๋•…์— ๋‘˜ ์ˆ˜ ์—†์–ด ๋ณด์กฐ ์ปจํ…Œ์ด๋„ˆ ๋ฒจํŠธ๋ฅผ ์ถ”๊ฐ€๋กœ ์„ค์น˜ํ•˜์˜€์Šต๋‹ˆ๋‹ค. ๋ณด์กฐ ์ปจํ…Œ์ด๋„ˆ ๋ฒจํŠธ๋Š” ์•ž ๋’ค๋กœ ์ด๋™์ด ๊ฐ€๋Šฅํ•˜์ง€๋งŒ ์ž…๊ตฌ ์™ธ์— ๋‹ค๋ฅธ ๋ฉด์ด ๋ง‰ํ˜€ ์žˆ์–ด์„œ ๋งจ ์•ž์˜ ์ƒ์ž๋งŒ ๋บ„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(์ฆ‰, ๊ฐ€์žฅ ๋งˆ์ง€๋ง‰์— ๋ณด์กฐ ์ปจํ…Œ์ด๋„ˆ ๋ฒจํŠธ์— ๋ณด๊ด€ํ•œ ์ƒ์ž๋ถ€ํ„ฐ ๊บผ๋‚ด๊ฒŒ ๋ฉ๋‹ˆ๋‹ค). ๋ณด์กฐ ์ปจํ…Œ์ด๋„ˆ ๋ฒจํŠธ๋ฅผ ์ด์šฉํ•ด๋„ ๊ธฐ์‚ฌ๋‹˜์ด ์›ํ•˜๋Š” ์ˆœ์„œ๋Œ€๋กœ ์ƒ์ž๋ฅผ ์‹ฃ์ง€ ๋ชป ํ•œ๋‹ค๋ฉด, ๋” ์ด์ƒ ์ƒ์ž๋ฅผ ์‹ฃ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
์˜ˆ๋ฅผ ๋“ค์–ด, ์˜์žฌ๊ฐ€ 5๊ฐœ์˜ ์ƒ์ž๋ฅผ ์‹ค์–ด์•ผ ํ•˜๋ฉฐ, ํƒ๋ฐฐ ๊ธฐ์‚ฌ๋‹˜์ด ์•Œ๋ ค์ค€ ์ˆœ์„œ๊ฐ€ ๊ธฐ์กด์˜ ์ปจํ…Œ์ด๋„ˆ ๋ฒจํŠธ์— ๋„ค ๋ฒˆ์งธ, ์„ธ ๋ฒˆ์งธ, ์ฒซ ๋ฒˆ์งธ, ๋‘ ๋ฒˆ์งธ, ๋‹ค์„ฏ ๋ฒˆ์งธ ๋†“์ธ ํƒ๋ฐฐ์ƒ์ž ์ˆœ์„œ์ธ ๊ฒฝ์šฐ, ์˜์žฌ๋Š” ์šฐ์„  ์ฒซ ๋ฒˆ์งธ, ๋‘ ๋ฒˆ์งธ, ์„ธ ๋ฒˆ์งธ ์ƒ์ž๋ฅผ ๋ณด์กฐ ์ปจํ…Œ์ด๋„ˆ ๋ฒจํŠธ์— ๋ณด๊ด€ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ ํ›„ ๋„ค ๋ฒˆ์งธ ์ƒ์ž๋ฅผ ํŠธ๋Ÿญ์— ์‹ฃ๊ณ  ๋ณด์กฐ ์ปจํ…Œ์ด๋„ˆ ๋ฒจํŠธ์—์„œ ์„ธ ๋ฒˆ์งธ ์ƒ์ž ๋นผ์„œ ํŠธ๋Ÿญ์—์‹ฃ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ์œผ๋กœ ์ฒซ ๋ฒˆ์งธ ์ƒ์ž๋ฅผ ์‹ค์–ด์•ผ ํ•˜์ง€๋งŒ ๋ณด์กฐ ์ปจํ…Œ์ด๋„ˆ ๋ฒจํŠธ์—์„œ๋Š” ๋‘ ๋ฒˆ์งธ ์ƒ์ž๋ฅผ, ๊ธฐ์กด์˜ ์ปจํ…Œ์ด๋„ˆ ๋ฒจํŠธ์—๋Š” ๋‹ค์„ฏ ๋ฒˆ์งธ ์ƒ์ž๋ฅผ ๊บผ๋‚ผ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋”์ด์ƒ์˜ ์ƒ์ž๋Š” ์‹ค์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ํŠธ๋Ÿญ์—๋Š” 2๊ฐœ์˜ ์ƒ์ž๋งŒ ์‹ค๋ฆฌ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.
ํƒ๋ฐฐ ๊ธฐ์‚ฌ๋‹˜์ด ์›ํ•˜๋Š” ์ƒ์ž ์ˆœ์„œ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ •์ˆ˜ ๋ฐฐ์—ด order๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ์˜์žฌ๊ฐ€ ๋ช‡ ๊ฐœ์˜ ์ƒ์ž๋ฅผ ์‹ค์„ ์ˆ˜ ์žˆ๋Š”์ง€ return ํ•˜๋Š” solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•˜์„ธ์š”.

์ œํ•œ์‚ฌํ•ญ

  • 1 โ‰ค order์˜ ๊ธธ์ด โ‰ค 1,000,000
  • order๋Š” 1์ด์ƒ order์˜ ๊ธธ์ด ์ดํ•˜์˜ ๋ชจ๋“  ์ •์ˆ˜๊ฐ€ ํ•œ๋ฒˆ์”ฉ ๋“ฑ์žฅํ•ฉ๋‹ˆ๋‹ค.
  • order[i]๋Š” ๊ธฐ์กด์˜ ์ปจํ…Œ์ด๋„ˆ ๋ฒจํŠธ์— order[i]๋ฒˆ์งธ ์ƒ์ž๋ฅผ i+1๋ฒˆ์งธ๋กœ ํŠธ๋Ÿญ์— ์‹ค์–ด์•ผ ํ•จ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

์ž…์ถœ๋ ฅ ์˜ˆ

order
result
[4, 3, 1, 2, 5]
2
[5, 4, 3, 2, 1]
5

์ž…์ถœ๋ ฅ ์˜ˆ ์„ค๋ช…

์ž…์ถœ๋ ฅ ์˜ˆ #1
  • ๋ฌธ์ œ ์˜ˆ์‹œ์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.
์ž…์ถœ๋ ฅ ์˜ˆ #2
  • ๋ชจ๋“  ์ƒ์ž๋ฅผ ๋ณด์กฐ ์ปจํ…Œ์ด๋„ˆ ๋ฒจํŠธ์— ๋ชจ๋‘ ๋„ฃ๊ณ , ์—ญ์ˆœ์œผ๋กœ ํ•˜๋‚˜์”ฉ ๋นผ์„œ ํŠธ๋Ÿญ์— ์‹ฃ์Šต๋‹ˆ๋‹ค.
 

solution.java

import java.util.*; class Solution { public int solution(int[] order) { Stack<Integer> stack = new Stack<>(); // ๋ณด์กฐ ์ปจํ…Œ์ด๋„ˆ ๋ฒจํŠธ int currentBox = 1; // ์ปจํ…Œ์ด๋„ˆ ๋ฒจํŠธ์˜ ๋‹ค์Œ ์ƒ์ž int loadedCount = 0; // ์„ฑ๊ณต์ ์œผ๋กœ ์‹ค์€ ์ƒ์ž ์ˆ˜ for (int targetBox : order) { // ์›ํ•˜๋Š” ์ƒ์ž์— ๋„๋‹ฌํ•˜๊ฑฐ๋‚˜ ๋‹ค ๊บผ๋‚ผ ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณต while (currentBox <= order.length && currentBox < targetBox) { stack.push(currentBox); currentBox++; } // ํ˜„์žฌ ์ปจํ…Œ์ด๋„ˆ ๋ฒจํŠธ์˜ ์ƒ์ž๊ฐ€ ์›ํ•˜๋Š” ์ƒ์ž์ธ ๊ฒฝ์šฐ ์‹ค๋Š”๋‹ค if (currentBox == targetBox) { loadedCount++; currentBox++; } // ์•„๋‹ˆ๋ผ๋ฉด ์›ํ•˜๋Š” ์ƒ์ž๊ฐ€ ๋ณด์กฐ ์Šคํƒ์˜ ์ƒ๋‹จ์— ์žˆ๋Š”์ง€ ํ™•์ธ else if (!stack.isEmpty() && stack.peek() == targetBox) { stack.pop(); loadedCount++; } // ๋‘ ์กฐ๊ฑด ๋ชจ๋‘ ์ถฉ์กฑ๋˜์ง€ ์•Š์œผ๋ฉด ์ƒ์ž๋ฅผ ์‹ค์„ ์ˆ˜ ์—†์Œ else { break; } } return loadedCount; } }
 

ํ•ต์‹ฌ ํ‚ค์›Œ๋“œ

  • ์ปจํ…Œ์ด๋„ˆ ๋ฒจํŠธ์˜ ํ˜„์žฌ ์ƒ์ž๊ฐ€ order ๋ฐฐ์—ด์˜ ๋ชฉํ‘œ ์ƒ์ž๋ณด๋‹ค ์ž‘์œผ๋ฉด ๋ชฉํ‘œ ์ƒ์ž์— ๋„๋‹ฌํ•  ๋•Œ๊นŒ์ง€ ์Šคํƒ์— ๋ฐ€์–ด ๋„ฃ๋Š”๋‹ค.
  • ์Šคํƒ ์ƒ๋‹จ์— ์žˆ๋Š” ์ƒ์ž๊ฐ€ ์›ํ•˜๋Š” ์ƒ์ž์ธ ๊ฒฝ์šฐ ์Šคํƒ์—์„œ ํ•ด๋‹น ์ƒ์ž๋ฅผ popํ•˜๊ณ  ์นด์šดํŠธ๋ฅผ ์ฆ๊ฐ€์‹œํ‚จ๋‹ค.
  • ๋ฒจํŠธ๋‚˜ ์Šคํƒ์— ์›ํ•˜๋Š” ์ƒ์ž๊ฐ€ ์—†์œผ๋ฉด ์ ์žฌ๋ฅผ ์ค‘์ง€ํ•œ๋‹ค.
 

๊ฒฐ๋ก !

์Šคํƒ์„ ์ด์šฉํ•ด์„œ ํ•ด๋‹น ๋ฌธ์ œ๋ฅผ ํ’€ ์ˆ˜ ์žˆ์—ˆ๋‹ค.
 
Share article

๐Ÿ‘จ๐Ÿปโ€๐Ÿ’ปDriedPollack's Blog