๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ“ฆ ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค/๐Ÿ—‚๏ธ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ํ’€์ด(Java)

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค/Java] ์ฃผ์ฐจ ์š”๊ธˆ ๊ณ„์‚ฐ

by ์‚๋šค์˜ค๋ฆฌ 2025. 10. 17.

๋ฌธ์ œ ์„ค๋ช…

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

 

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

SW๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•œ ํ‰๊ฐ€, ๊ต์œก์˜ Total Solution์„ ์ œ๊ณตํ•˜๋Š” ๊ฐœ๋ฐœ์ž ์„ฑ์žฅ์„ ์œ„ํ•œ ๋ฒ ์ด์Šค์บ ํ”„

programmers.co.kr

์ฃผ์ฐจ์žฅ์˜ ์š”๊ธˆํ‘œ์™€ ์ฐจ๋Ÿ‰์ด ๋“ค์–ด์˜ค๊ณ (์ž…์ฐจ) ๋‚˜๊ฐ„(์ถœ์ฐจ) ๊ธฐ๋ก์ด ์ฃผ์–ด์กŒ์„ ๋•Œ, ์ฐจ๋Ÿ‰๋ณ„๋กœ ์ฃผ์ฐจ ์š”๊ธˆ์„ ๊ณ„์‚ฐํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์•„๋ž˜๋Š” ํ•˜๋‚˜์˜ ์˜ˆ์‹œ๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

  • ์š”๊ธˆํ‘œ
๊ธฐ๋ณธ ์‹œ๊ฐ„(๋ถ„) ๊ธฐ๋ณธ ์š”๊ธˆ(์›) ๋‹จ์œ„ ์‹œ๊ฐ„(๋ถ„) ๋‹จ์œ„ ์š”๊ธˆ(์›)
180 5000 10 600
  • ์ž…/์ถœ์ฐจ ๊ธฐ๋ก
์‹œ๊ฐ(์‹œ:๋ถ„) ์ฐจ๋Ÿ‰ ๋ฒˆํ˜ธ ๋‚ด์—ญ
05:34 5961 ์ž…์ฐจ
06:00 0000 ์ž…์ฐจ
06:34 0000 ์ถœ์ฐจ
07:59 5961 ์ถœ์ฐจ
07:59 0148 ์ž…์ฐจ
18:59 0000 ์ž…์ฐจ
19:09 0148 ์ถœ์ฐจ
22:59 5961 ์ž…์ฐจ
23:00 5961 ์ถœ์ฐจ
  • ์ž๋™์ฐจ๋ณ„ ์ฃผ์ฐจ ์š”๊ธˆ
์ฐจ๋Ÿ‰ ๋ฒˆํ˜ธ ๋ˆ„์  ์ฃผ์ฐจ ์‹œ๊ฐ„(๋ถ„) ์ฃผ์ฐจ ์š”๊ธˆ(์›)
0000 34 + 300 = 334 5000 + ⌈(334 - 180) / 10 x 600 = 14600
0148 670 5000 + ⌈(670 - 180) / 10 x 600 = 34400
5961 145 + 1 = 146 5000
  • ์–ด๋–ค ์ฐจ๋Ÿ‰์ด ์ž…์ฐจ๋œ ํ›„์— ์ถœ์ฐจ๋œ ๋‚ด์—ญ์ด ์—†๋‹ค๋ฉด, 23:59์— ์ถœ์ฐจ๋œ ๊ฒƒ์œผ๋กœ ๊ฐ„์ฃผํ•ฉ๋‹ˆ๋‹ค.
    • 0000๋ฒˆ ์ฐจ๋Ÿ‰์€ 18:59์— ์ž…์ฐจ๋œ ์ดํ›„, ์ถœ์ฐจ๋œ ๋‚ด์—ญ์ด ์—†์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ, 23:59์— ์ถœ์ฐจ๋œ ๊ฒƒ์œผ๋กœ ๊ฐ„์ฃผํ•ฉ๋‹ˆ๋‹ค.
  • 00:00๋ถ€ํ„ฐ 23:59๊นŒ์ง€์˜ ์ž…/์ถœ์ฐจ ๋‚ด์—ญ์„ ๋ฐ”ํƒ•์œผ๋กœ ์ฐจ๋Ÿ‰๋ณ„ ๋ˆ„์  ์ฃผ์ฐจ ์‹œ๊ฐ„์„ ๊ณ„์‚ฐํ•˜์—ฌ ์š”๊ธˆ์„ ์ผ๊ด„๋กœ ์ •์‚ฐํ•ฉ๋‹ˆ๋‹ค.
  • ๋ˆ„์  ์ฃผ์ฐจ ์‹œ๊ฐ„์ด ๊ธฐ๋ณธ ์‹œ๊ฐ„์ดํ•˜๋ผ๋ฉด, ๊ธฐ๋ณธ์š”๊ธˆ์„ ์ฒญ๊ตฌํ•ฉ๋‹ˆ๋‹ค.
  • ๋ˆ„์  ์ฃผ์ฐจ ์‹œ๊ฐ„์ด ๊ธฐ๋ณธ ์‹œ๊ฐ„์„ ์ดˆ๊ณผํ•˜๋ฉด, ๊ธฐ๋ณธ ์š”๊ธˆ์— ๋”ํ•ด์„œ, ์ดˆ๊ณผํ•œ ์‹œ๊ฐ„์— ๋Œ€ํ•ด์„œ ๋‹จ์œ„ ์‹œ๊ฐ„๋งˆ๋‹ค๋‹จ์œ„ ์š”๊ธˆ์„ ์ฒญ๊ตฌํ•ฉ๋‹ˆ๋‹ค.
    • ์ดˆ๊ณผํ•œ ์‹œ๊ฐ„์ด ๋‹จ์œ„ ์‹œ๊ฐ„์œผ๋กœ ๋‚˜๋ˆ„์–ด ๋–จ์–ด์ง€์ง€ ์•Š์œผ๋ฉด, ์˜ฌ๋ฆผ ํ•ฉ๋‹ˆ๋‹ค.
    • ⌈a⌉ : a๋ณด๋‹ค ์ž‘์ง€ ์•Š์€ ์ตœ์†Œ์˜ ์ •์ˆ˜๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, ์˜ฌ๋ฆผ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

์ฃผ์ฐจ ์š”๊ธˆ์„ ๋‚˜ํƒ€๋‚ด๋Š” ์ •์ˆ˜ ๋ฐฐ์—ด fees, ์ž๋™์ฐจ์˜ ์ž…/์ถœ์ฐจ ๋‚ด์—ญ์„ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฌธ์ž์—ด ๋ฐฐ์—ด records๊ฐ€ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค. ์ฐจ๋Ÿ‰ ๋ฒˆํ˜ธ๊ฐ€ ์ž‘์€ ์ž๋™์ฐจ๋ถ€ํ„ฐ ์ฒญ๊ตฌํ•  ์ฃผ์ฐจ ์š”๊ธˆ์„ ์ฐจ๋ก€๋Œ€๋กœ ์ •์ˆ˜ ๋ฐฐ์—ด์— ๋‹ด์•„์„œ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•ด ์ฃผ์„ธ์š”.

์ œํ•œ ์‚ฌํ•ญ

  • fees์˜ ๊ธธ์ด = 4
    • fees[0] = ๊ธฐ๋ณธ ์‹œ๊ฐ„(๋ถ„)
    • 1 ≤ fees[0] ≤ 1,439
    • fees[1] = ๊ธฐ๋ณธ์š”๊ธˆ(์›)
    • 0 ≤ fees[1] ≤ 100,000
    • fees[2] = ๋‹จ์œ„ ์‹œ๊ฐ„(๋ถ„)
    • 1 ≤ fees[2] ≤ 1,439
    • fees[3] = ๋‹จ์œ„ ์š”๊ธˆ(์›)
    • 1 ≤ fees[3] ≤ 10,000
  • 1 ≤ records์˜ ๊ธธ์ด ≤ 1,000
    • records์˜ ๊ฐ ์›์†Œ๋Š” "์‹œ๊ฐ ์ฐจ๋Ÿ‰๋ฒˆํ˜ธ ๋‚ด์—ญ" ํ˜•์‹์˜ ๋ฌธ์ž์—ด์ž…๋‹ˆ๋‹ค.
    • ์‹œ๊ฐ, ์ฐจ๋Ÿ‰๋ฒˆํ˜ธ, ๋‚ด์—ญ์€ ํ•˜๋‚˜์˜ ๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ถ„๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
    • ์‹œ๊ฐ์€ ์ฐจ๋Ÿ‰์ด ์ž…์ฐจ๋˜๊ฑฐ๋‚˜ ์ถœ์ฐจ๋œ ์‹œ๊ฐ์„ ๋‚˜ํƒ€๋‚ด๋ฉฐ, HH:MM ํ˜•์‹์˜ ๊ธธ์ด 5์ธ ๋ฌธ์ž์—ด์ž…๋‹ˆ๋‹ค.
      • HH:MM์€ 00:00๋ถ€ํ„ฐ 23:59๊นŒ์ง€ ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค.
      • ์ž˜๋ชป๋œ ์‹œ๊ฐ("25:22", "09:65" ๋“ฑ)์€ ์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์ง€์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
    • ์ฐจ๋Ÿ‰๋ฒˆํ˜ธ๋Š” ์ž๋™์ฐจ๋ฅผ ๊ตฌ๋ถ„ํ•˜๊ธฐ ์œ„ํ•œ, `0'~'9'๋กœ ๊ตฌ์„ฑ๋œ ๊ธธ์ด 4์ธ ๋ฌธ์ž์—ด์ž…๋‹ˆ๋‹ค.
    • ๋‚ด์—ญ์€ ๊ธธ์ด 2 ๋˜๋Š” 3์ธ ๋ฌธ์ž์—ด๋กœ, IN ๋˜๋Š” OUT์ž…๋‹ˆ๋‹ค. IN์€ ์ž…์ฐจ๋ฅผ, OUT์€ ์ถœ์ฐจ๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.
    • records์˜ ์›์†Œ๋“ค์€ ์‹œ๊ฐ์„ ๊ธฐ์ค€์œผ๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌ๋˜์–ด ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค.
    • records๋Š” ํ•˜๋ฃจ ๋™์•ˆ์˜ ์ž…/์ถœ์ฐจ๋œ ๊ธฐ๋ก๋งŒ ๋‹ด๊ณ  ์žˆ์œผ๋ฉฐ, ์ž…์ฐจ๋œ ์ฐจ๋Ÿ‰์ด ๋‹ค์Œ๋‚  ์ถœ์ฐจ๋˜๋Š” ๊ฒฝ์šฐ๋Š” ์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์ง€์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
    • ๊ฐ™์€ ์‹œ๊ฐ์—, ๊ฐ™์€ ์ฐจ๋Ÿ‰๋ฒˆํ˜ธ์˜ ๋‚ด์—ญ์ด 2๋ฒˆ ์ด์ƒ ๋‚˜ํƒ€๋‚ด์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
    • ๋งˆ์ง€๋ง‰ ์‹œ๊ฐ(23:59)์— ์ž…์ฐจ๋˜๋Š” ๊ฒฝ์šฐ๋Š” ์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์ง€์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
    • ์•„๋ž˜์˜ ์˜ˆ๋ฅผ ํฌํ•จํ•˜์—ฌ, ์ž˜๋ชป๋œ ์ž…๋ ฅ์€ ์ฃผ์–ด์ง€์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
      • ์ฃผ์ฐจ์žฅ์— ์—†๋Š” ์ฐจ๋Ÿ‰์ด ์ถœ์ฐจ๋˜๋Š” ๊ฒฝ์šฐ
      • ์ฃผ์ฐจ์žฅ์— ์ด๋ฏธ ์žˆ๋Š” ์ฐจ๋Ÿ‰(์ฐจ๋Ÿ‰๋ฒˆํ˜ธ๊ฐ€ ๊ฐ™์€ ์ฐจ๋Ÿ‰)์ด ๋‹ค์‹œ ์ž…์ฐจ๋˜๋Š” ๊ฒฝ์šฐ

์ž…์ถœ๋ ฅ ์˜ˆ

fees records result
[180, 5000, 10, 600] ["05:34 5961 IN", "06:00 0000 IN", "06:34 0000 OUT", "07:59 5961 OUT", "07:59 0148 IN", "18:59 0000 IN", "19:09 0148 OUT", "22:59 5961 IN", "23:00 5961 OUT"] [14600, 34400, 5000]
[120, 0, 60, 591] ["16:00 3961 IN","16:00 0202 IN","18:00 3961 OUT","18:00 0202 OUT","23:58 3961 IN"] [0, 591]
[1, 461, 1, 10] ["00:00 1234 IN"] [14841]

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

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

  • ๋ฌธ์ œ ์˜ˆ์‹œ์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

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

  • ์š”๊ธˆํ‘œ
๊ธฐ๋ณธ ์‹œ๊ฐ„(๋ถ„) ๊ธฐ๋ณธ ์š”๊ธˆ(์›) ๋‹จ์œ„ ์‹œ๊ฐ„(๋ถ„) ๋‹จ์œ„ ์š”๊ธˆ(์›)
120 0 60 591
  • ์ž…/์ถœ์ฐจ ๊ธฐ๋ก
์‹œ๊ฐ(์‹œ:๋ถ„) ์ฐจ๋Ÿ‰ ๋ฒˆํ˜ธ ๋‚ด์—ญ
16:00 3961 ์ž…์ฐจ
16:00 0202 ์ž…์ฐจ
18:00 3961 ์ถœ์ฐจ
18:00 0202 ์ถœ์ฐจ
23:58 3961 ์ž…์ฐจ
  • ์ž๋™์ฐจ๋ณ„ ์ฃผ์ฐจ ์š”๊ธˆ
์ฐจ๋Ÿ‰ ๋ฒˆํ˜ธ ๋ˆ„์  ์ฃผ์ฐจ ์‹œ๊ฐ„(๋ถ„) ์ฃผ์ฐจ ์š”๊ธˆ(์›)
0202 120 0
3961 120 + 1 = 121 0 +(121 - 120) / 60x 591 = 591
  • 3961๋ฒˆ ์ฐจ๋Ÿ‰์€ 2๋ฒˆ์งธ ์ž…์ฐจ๋œ ํ›„์—๋Š” ์ถœ์ฐจ๋œ ๋‚ด์—ญ์ด ์—†์œผ๋ฏ€๋กœ, 23:59์— ์ถœ์ฐจ๋˜์—ˆ๋‹ค๊ณ  ๊ฐ„์ฃผํ•ฉ๋‹ˆ๋‹ค.

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

  • ์š”๊ธˆํ‘œ
๊ธฐ๋ณธ ์‹œ๊ฐ„(๋ถ„) ๊ธฐ๋ณธ ์š”๊ธˆ(์›) ๋‹จ์œ„ ์‹œ๊ฐ„(๋ถ„) ๋‹จ์œ„ ์š”๊ธˆ(์›)
1 461 1 10
  • ์ž…/์ถœ์ฐจ ๊ธฐ๋ก
์‹œ๊ฐ(์‹œ:๋ถ„) ์ฐจ๋Ÿ‰ ๋ฒˆํ˜ธ ๋‚ด์—ญ
00:00 1234 ์ž…์ฐจ
  • ์ž๋™์ฐจ๋ณ„ ์ฃผ์ฐจ ์š”๊ธˆ
์ฐจ๋Ÿ‰ ๋ฒˆํ˜ธ ๋ˆ„์  ์ฃผ์ฐจ ์‹œ๊ฐ„(๋ถ„) ์ฃผ์ฐจ ์š”๊ธˆ(์›)
1234 1439 461 +(1439 - 1) / 1x 10 = 14841
  • 1234๋ฒˆ ์ฐจ๋Ÿ‰์€ ์ถœ์ฐจ ๋‚ด์—ญ์ด ์—†์œผ๋ฏ€๋กœ, 23:59์— ์ถœ์ฐจ๋˜์—ˆ๋‹ค๊ณ  ๊ฐ„์ฃผํ•ฉ๋‹ˆ๋‹ค.

 

๋‚ด๊ฐ€ ์ž‘์„ฑํ•œ ์ฝ”๋“œ

import java.util.*;

class Solution {
    public int[] solution(int[] fees, String[] records) {
        // ์ฐจ๋Ÿ‰ ์ž…์ฐจ ์‹œ๊ฐ„์„ ์ €์žฅํ•˜๋Š” Map (ํ˜„์žฌ ์ฃผ์ฐจ ์ค‘์ธ ์ฐจ๋Ÿ‰)
        Map<String, Integer> inMap = new HashMap<>();
        // ์ฐจ๋Ÿ‰๋ณ„ ๋ˆ„์  ์ฃผ์ฐจ ์‹œ๊ฐ„์„ ์ €์žฅํ•˜๋Š” Map
        Map<String, Integer> accMap = new HashMap<>();
        
        // ์ฃผ์ฐจ ๊ธฐ๋ก ์ˆœํšŒ
        for (String record : records) {
            // ๊ณต๋ฐฑ ๊ธฐ์ค€์œผ๋กœ ์‹œ๊ฐ„, ์ฐจ๋Ÿ‰๋ฒˆํ˜ธ, ์ž…/์ถœ์ฐจ ์ƒํƒœ ๋ถ„๋ฆฌ
            String[] s = record.split("\\s+");
            // ์‹œ๊ฐ„์„ "๋ถ„" ๋‹จ์œ„๋กœ ๋ณ€ํ™˜
            int m = toMinutes(s[0]);
            String car = s[1];
            String io = s[2];
            
            // ์ž…์ฐจ(IN)์ธ ๊ฒฝ์šฐ -> ์ž…์ฐจ ์‹œ๊ฐ ๊ธฐ๋ก
            if (io.equals("IN")) {
                inMap.put(car, m);
            // ์ถœ์ฐจ(OUT)์ธ ๊ฒฝ์šฐ -> ๋ˆ„์  ์ฃผ์ฐจ ์‹œ๊ฐ„ ๊ณ„์‚ฐ ํ›„ ์ œ๊ฑฐ
            } else {
                // Map์—์„œ ์ œ๊ฑฐํ•˜๋ฉด์„œ ์ž…์ฐจ ์‹œ๊ฐ ๋ณ€ํ™˜
                int min = inMap.remove(car);
                // (์ถœ์ฐจ ์‹œ๊ฐ - ์ž…์ฐจ ์‹œ๊ฐ)์„ ๋ˆ„์  ์ฃผ์ฐจ ์‹œ๊ฐ„์— ๋”ํ•จ
                accMap.put(car, accMap.getOrDefault(car, 0) + (m - min));
            }
        }
        
        // ์ถœ์ฐจํ•˜์ง€ ์•Š์€ ์ฐจ๋Ÿ‰ ์ฒ˜๋ฆฌ (23:59 ๊ธฐ์ค€์œผ๋กœ ์ •์‚ฐ)
        for (Map.Entry<String, Integer> e : inMap.entrySet()) {
            String car = e.getKey();
            int in = e.getValue();
            // 23:59(=1439๋ถ„)๊นŒ์ง€ ์ฃผ์ฐจํ•œ ๊ฒƒ์œผ๋กœ ๊ณ„์‚ฐ
            accMap.put(car, accMap.getOrDefault(car, 0) + (1439 - in));
        }
        
        // ์ฐจ๋Ÿ‰ ๋ฒˆํ˜ธ ๊ธฐ์ค€ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ
        List<String> cars = new ArrayList<>(accMap.keySet());
        Collections.sort(cars);
        
        int[] answer = new int[cars.size()];
        
        // ๊ฐ ์ฐจ๋Ÿ‰๋ณ„ ์ตœ์ข… ์š”๊ธˆ ๊ณ„์‚ฐ
        for (int i = 0; i < cars.size(); i++) {
            // ์ด ์ฃผ์ฐจ ์‹œ๊ฐ„(๋ถ„)
            int minutes = accMap.get(cars.get(i));
            
            // ๊ธฐ๋ณธ ์‹œ๊ฐ„ ์ดํ•˜๋ผ๋ฉด ๊ธฐ๋ณธ ์š”๊ธˆ๋งŒ ๋ถ€๊ณผ
            if (minutes <= fees[0]) {
                answer[i] = fees[1];
                continue;
            }
            
            // ์ดˆ๊ณผํ•œ ์‹œ๊ฐ„ ๊ณ„์‚ฐ
            int extra = minutes - fees[0];
            // ๋‹จ์œ„ ์‹œ๊ฐ„
            int unitT = fees[2];
            // ๋‹จ์œ„ ์š”๊ธˆ
            int unitC = fees[3];
            
            // ์ถ”๊ฐ€ ๋‹จ์œ„ ๊ณ„์‚ฐ
            // ex) ๋‹จ์œ„์‹œ๊ฐ„ 10๋ถ„, ์ดˆ๊ณผ์‹œ๊ฐ„ 11๋ถ„ -> (11 + 10 - 1) / 10 = 2๋‹จ์œ„
            int units = (extra + unitT - 1) / unitT;
            // ์ด ์š”๊ธˆ = ๊ธฐ๋ณธ ์š”๊ธˆ + (๋‹จ์œ„ ์š”๊ธˆ * ๋‹จ์œ„์ˆ˜)
            int total = fees[1] + units * unitC;
            
            answer[i] = total;
        }
        
        // ์ฐจ๋Ÿ‰๋ฒˆํ˜ธ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ๊ณ„์‚ฐ๋œ ์š”๊ธˆ ๋ฐฐ์—ด ๋ฐ˜ํ™˜
        return answer;
    }
    
    // "HH:MM" ํ˜•ํƒœ์˜ ์‹œ๊ฐ„์„ "๋ถ„" ๋‹จ์œ„๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๋ฉ”์„œ๋“œ
    private int toMinutes(String time) {
        String[] t = time.split(":");
        int hour = Integer.parseInt(t[0]);
        int minute = Integer.parseInt(t[1]);
        
        return hour * 60 + minute;
    }
}

๋ฌธ์ œ๋ฅผ ํ’€๊ธฐ ์œ„ํ•ด ์ƒ๊ฐํ•œ ๋ฐฉํ–ฅ

์ฒ˜์Œ ๋ฌธ์ œ๋ฅผ ๋ดค์„ ๋•Œ, ์ฐจ๋Ÿ‰์˜ ์ž…์ถœ์ฐจ ๊ธฐ๋ก์„ ๋ถ„์„ํ•˜์—ฌ ๊ฐ ์ฐจ๋Ÿ‰๋ณ„๋กœ ์ตœ์ข… ์ฃผ์ฐจ ์š”๊ธˆ์„ ๊ณ„์‚ฐํ•ด์•ผ ํ•˜๋Š” ๋ฌธ์ œ์ž„์„ ํŒŒ์•…ํ–ˆ๋‹ค. ๋‹จ์ˆœํžˆ ์ž…์ฐจ(IN)์™€ ์ถœ์ฐจ(OUT)๋งŒ ๊ตฌ๋ถ„ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ์ถœ์ฐจ ๊ธฐ๋ก์ด ์—†๋Š” ์ฐจ๋Ÿ‰์˜ ๊ฒฝ์šฐ 23:59๊นŒ์ง€ ์ฃผ์ฐจํ–ˆ๋‹ค๊ณ  ๊ฐ„์ฃผํ•ด์•ผ ํ•˜๋ฉฐ, ๋ˆ„์ ๋œ ์ฃผ์ฐจ ์‹œ๊ฐ„์— ๋”ฐ๋ผ ์š”๊ธˆ์„ ๊ณ„์‚ฐํ•˜๋Š” ๊ฒƒ์ด ํ•ต์‹ฌ์ด์—ˆ๋‹ค.

์กฐ๊ฑด์„ ๋ถ„์„ํ•ด ๋ณด๋ฉด, ๊ฐ ๊ธฐ๋ก์€ "์‹œ๊ฐ ์ฐจ๋Ÿ‰๋ฒˆํ˜ธ IN/OUT" ํ˜•์‹์œผ๋กœ ์ฃผ์–ด์ง€๋ฉฐ, ๋™์ผํ•œ ์ฐจ๋Ÿ‰์ด ์—ฌ๋Ÿฌ ๋ฒˆ ์ž…์ถœ์ฐจํ•  ์ˆ˜ ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ ํ•œ ๋ฒˆ์˜ ์ž…์ถœ์ฐจ๋งŒ์œผ๋กœ ๊ณ„์‚ฐํ•  ์ˆ˜ ์—†๊ณ , ์ฐจ๋Ÿ‰๋ณ„๋กœ ๋ˆ„์  ์ฃผ์ฐจ ์‹œ๊ฐ„์„ ์ €์žฅํ•ด์•ผ ํ–ˆ๋‹ค. ๋˜ํ•œ ์ตœ์ข… ์š”๊ธˆ ๊ณ„์‚ฐ ์‹œ์—๋Š” ๊ธฐ๋ณธ์š”๊ธˆ, ๋‹จ์œ„ ์‹œ๊ฐ„, ๋‹จ์œ„ ์š”๊ธˆ์„ ๊ธฐ์ค€์œผ๋กœ ์ดˆ๊ณผ ์‹œ๊ฐ„์„ ์˜ฌ๋ฆผ(Math.ceil) ์ฒ˜๋ฆฌํ•ด์•ผ ํ•œ๋‹ค๋Š” ์ ๋„ ์ฃผ์˜ํ•ด์•ผ ํ–ˆ๋‹ค.

์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด, ๊ฐ ์ฐจ๋Ÿ‰์˜ ์ž…์ฐจ ์‹œ๊ฐ์„ ์ €์žฅํ•˜๋Š” Map<String, Integer>(inMap)๊ณผ ์ฐจ๋Ÿ‰๋ณ„ ๋ˆ„์  ์ฃผ์ฐจ ์‹œ๊ฐ„์„ ์ €์žฅํ•˜๋Š” Map<String, Integer>(accMap)์„ ์‚ฌ์šฉํ•˜๊ธฐ๋กœ ํ–ˆ๋‹ค. inMap์—๋Š” ํ˜„์žฌ ์ฃผ์ฐจ ์ค‘์ธ ์ฐจ๋Ÿ‰์˜ ์ž…์ฐจ ์‹œ๊ฐ์„ ์ €์žฅํ•˜๊ณ , ์ถœ์ฐจ ์‹œ์ ์ด ์˜ค๋ฉด remove()๋ฅผ ์ด์šฉํ•ด ์ž…์ฐจ ์‹œ๊ฐ„์„ ๊บผ๋‚ด๊ณ  ๋ˆ„์  ์ฃผ์ฐจ ์‹œ๊ฐ„(accMap)์— ๋”ํ–ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์ž…์ถœ์ฐจ๋ฅผ ๊น”๋”ํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์—ˆ๊ณ , ์ถœ์ฐจํ•˜์ง€ ์•Š์€ ์ฐจ๋Ÿ‰์€ ๋ฐ˜๋ณต๋ฌธ์„ ๋Œ๋ฉฐ 23:59(=1439๋ถ„)๊นŒ์ง€์˜ ์‹œ๊ฐ„์„ ๋”ํ•ด ์ตœ์ข… ๋ˆ„์  ์‹œ๊ฐ„์„ ์™„์„ฑํ–ˆ๋‹ค.

์‹œ๊ฐ„ ๊ณ„์‚ฐ์€ “HH:MM” ํ˜•ํƒœ๋ฅผ ๋ถ„ ๋‹จ์œ„๋กœ ๋ณ€ํ™˜ํ•˜๋Š” toMinutes() ๋ฉ”์„œ๋“œ๋ฅผ ๋ณ„๋„๋กœ ๋งŒ๋“ค์–ด ์ฒ˜๋ฆฌํ–ˆ๋‹ค. ์ด ๋•๋ถ„์— ์‹œ๊ฐ ๊ณ„์‚ฐ์ด ๋‹จ์ˆœํ•ด์กŒ๊ณ , ์ถœ์ฐจ ์‹œ๊ฐ„์—์„œ ์ž…์ฐจ ์‹œ๊ฐ„์„ ๋บ„ ๋•Œ ์ง๊ด€์ ์œผ๋กœ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค. ์ดํ›„ ์ฐจ๋Ÿ‰ ๋ฒˆํ˜ธ๋ฅผ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•ด ๊ฒฐ๊ณผ ๋ฐฐ์—ด์— ๋‹ด์•˜์œผ๋ฉฐ, ์š”๊ธˆ ๊ณ„์‚ฐ ์‹œ์—๋Š” ๊ธฐ๋ณธ ์‹œ๊ฐ„์„ ์ดˆ๊ณผํ•œ ๋ถ€๋ถ„์— ๋Œ€ํ•ด (์ดˆ๊ณผ์‹œ๊ฐ„ + ๋‹จ์œ„์‹œ๊ฐ„ - 1) / ๋‹จ์œ„์‹œ๊ฐ„ ๊ณต์‹์„ ํ™œ์šฉํ•ด ์ •์ˆ˜ ์—ฐ์‚ฐ์œผ๋กœ ์˜ฌ๋ฆผ ๊ณ„์‚ฐ์„ ์ˆ˜ํ–‰ํ–ˆ๋‹ค.

์ „์ฒด์ ์œผ๋กœ ์ด ๋ฌธ์ œ๋Š” ๋ฌธ์ž์—ด ํŒŒ์‹ฑ, ํ•ด์‹œ๋งต์„ ์ด์šฉํ•œ ๋ˆ„์  ๊ด€๋ฆฌ, ์˜ฌ๋ฆผ ๊ณ„์‚ฐ์ด๋ผ๋Š” ์„ธ ๊ฐ€์ง€ ์š”์†Œ๊ฐ€ ํ•ต์‹ฌ์ด์—ˆ๋‹ค. ์‹œ๊ฐ„๋ณต์žก๋„๋Š” O(N log N)์œผ๋กœ, N์€ records์˜ ๊ธธ์ด์ด๋ฉฐ, ์ฐจ๋Ÿ‰ ๋ฒˆํ˜ธ ์ •๋ ฌ ๋‹จ๊ณ„์—์„œ log N์ด ์ถ”๊ฐ€๋œ๋‹ค. ๊ฐ ์ฐจ๋Ÿ‰์˜ ์ž…์ถœ์ฐจ ๊ธฐ๋ก์„ ๋งต์—์„œ ๊ด€๋ฆฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํƒ์ƒ‰๊ณผ ๊ฐฑ์‹ ์€ ๋ชจ๋‘ ํ‰๊ท ์ ์œผ๋กœ O(1)์— ๊ฐ€๊นŒ์›Œ ํšจ์œจ์ ์œผ๋กœ ์ฒ˜๋ฆฌ๋œ๋‹ค.

๊ฒฐ๊ณผ์ ์œผ๋กœ, ์ด ๋ฌธ์ œ๋Š” ๋‹จ์ˆœํ•œ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ ๋ฌธ์ œ์ด์ง€๋งŒ “์ถœ์ฐจ ๋ˆ„๋ฝ ์ฐจ๋Ÿ‰ ์ฒ˜๋ฆฌ”์™€ “์š”๊ธˆ ์˜ฌ๋ฆผ ๊ณ„์‚ฐ” ๋ถ€๋ถ„์—์„œ ์„ธ๋ฐ€ํ•œ ๊ตฌํ˜„์ด ํ•„์š”ํ•œ ๋ฌธ์ œ์˜€๋‹ค.
์ด ๊ณผ์ •์„ ํ†ตํ•ด ๋ฌธ์ž์—ด ํŒŒ์‹ฑ๊ณผ Map ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ํ™œ์šฉํ•œ ๋ˆ„์  ๊ณ„์‚ฐ์˜ ์ค‘์š”์„ฑ์„ ๋‹ค์‹œ ํ•œ๋ฒˆ ๋А๋‚„ ์ˆ˜ ์žˆ์—ˆ๋‹ค.