Hello Kitty Eyes Shut
๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐Ÿ’ป ์ฝ”ํ…Œ/๐Ÿ“Œ JAVA

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค/JAVA] ์œ ์—ฐ๊ทผ๋ฌด์ œ

๋ฐ˜์‘ํ˜•

 

 

 

๐Ÿ”— ๋ฌธ์ œ ๋ฐ”๋กœ๊ฐ€๊ธฐ

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

 

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

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

programmers.co.kr

 


๐Ÿ“Œ ๋ฌธ์ œ ์š”์•ฝ

 

๊ทธ๋ ™์—์„œ๋Š” ์ง์›๋“ค์ด ์ง์ ‘ ์„ค์ •ํ•œ ์ถœ๊ทผ ํฌ๋ง ์‹œ๊ฐ์— ๋งž์ถฐ ๋Šฆ์ง€ ์•Š๊ฒŒ ์ถœ๊ทผํ•˜๋ฉด ์ƒํ’ˆ์„ ์ฃผ๋Š” ์ด๋ฒคํŠธ๋ฅผ 1์ฃผ์ผ ๋™์•ˆ ์ง„ํ–‰ํ•˜๋ ค๊ณ  ํ•œ๋‹ค.

์ด๋ฒคํŠธ ์กฐ๊ฑด์€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

 

1๏ธโƒฃ ์ถœ๊ทผ ์ธ์ • ์กฐ๊ฑด

  • ๊ฐ ์ง์›์€ ์ถœ๊ทผ ํฌ๋ง ์‹œ๊ฐ์„ ์„ค์ •ํ•œ๋‹ค.
  • ์„ค์ •ํ•œ ์‹œ๊ฐ + 10๋ถ„ ์ด๋‚ด์— ์ถœ๊ทผ ํ•˜๋ฉด ์ •์‹œ ์ถœ๊ทผ์œผ๋กœ ์ธ์ •๋œ๋‹ค.
    ex. ์ถœ๊ทผ ํฌ๋ง ์‹œ๊ฐ์ด 9์‹œ 58๋ถ„(958)์ด๋ฉด → 10์‹œ 8๋ถ„(1008)๊นŒ์ง€ ์ถœ๊ทผํ•ด์•ผ ํ•œ๋‹ค.

2๏ธโƒฃ ์ถœ๊ทผ ๋ฐ์ดํ„ฐ ํ˜•์‹

  • ์‹œ๊ฐ„์€ ๋ชจ๋‘ ' ์‹œ* 100 + ๋ถ„' ์˜ ์ •์ˆ˜ ํ˜•ํƒœ๋กœ ์ฃผ์–ด์ง„๋‹ค.
    ex) 958 → 9์‹œ 58๋ถ„, 1013 → 10์‹œ 13๋ถ„

3๏ธโƒฃ ๊ธฐํƒ€ ์กฐ๊ฑด

  • ์ด๋ฒคํŠธ๋Š” 1์ฃผ์ผ ๋™์•ˆ ์ง„ํ–‰๋œ๋‹ค.
  • ๊ฐ ์ง์›์˜ ์ถœ๊ทผ ๊ธฐ๋ก์€ 7์ผ์น˜ ๋ฐฐ์—ด๋กœ ์ฃผ์–ด์ง„๋‹ค.
  • ํ† ์š”์ผ๊ณผ ์ผ์š”์ผ์€ ์ด๋ฒคํŠธ ํ‰๊ฐ€์—์„œ ์ œ์™ธ๋œ๋‹ค.
  • ํ‰์ผ ์ค‘ ํ•˜๋ฃจ๋ผ๋„ ์ง€๊ฐํ•œ ์ง์›์€ ์ƒํ’ˆ ์ง€๊ธ‰ ๋Œ€์ƒ์—์„œ ์ œ์™ธ๋œ๋‹ค.
  • ์ด๋ฒคํŠธ๋Š” startday ์š”์ผ๋ถ€ํ„ฐ ์‹œ์ž‘๋œ๋‹ค.
    ex) 1 → ์›”์š”์ผ, 2 → ํ™”์š”์ผ, ..., 7 → ์ผ์š”์ผ

 

๐ŸŽฏ ๋ชฉํ‘œ

์ง์›๋“ค์˜ ์ถœ๊ทผ ํฌ๋ง ์‹œ๊ฐ(schedules)๊ณผ ์‹ค์ œ ์ถœ๊ทผ ์‹œ๊ฐ๋“ค(timelogs)์ด ์ฃผ์–ด์กŒ์„ ๋•Œ,

์ด๋ฒคํŠธ ๊ธฐ๊ฐ„ ์ค‘ ์ง€๊ฐ ์—†์ด ํ‰์ผ 5์ผ ๋ชจ๋‘ ์ •์‹œ์— ์ถœ๊ทผํ•œ ์ง์›์˜ ์ˆ˜๋ฅผ ๊ตฌํ•ด์•ผ ํ•œ๋‹ค.

 


๐Ÿ’ก ์•„์ด๋””์–ด

1๏ธโƒฃ ๋ถ„ ๋‹จ์œ„๋กœ ๋น„๊ต๋ฅผ ์œ„ํ•œ ์‹œ๊ฐ„์„ ๋ณ€ํ™˜ํ•œ๋‹ค.

  • 958 ์ฒ˜๋Ÿผ ์ˆซ์ž๋กœ ํ‘œํ˜„๋œ ์‹œ๊ฐ์„ ์‹œ๊ฐ„๊ณผ ๋ถ„์œผ๋กœ ๋‚˜๋ˆˆ ํ›„, ์ „์ฒด ์‹œ๊ฐ„์„ ๋ถ„ ๋‹จ์œ„๋กœ ํ™˜์‚ฐํ•œ๋‹ค.
958 → 9์‹œ 58๋ถ„ → 9 * 60 + 58 = 598๋ถ„
์ถœ๊ทผ ์ธ์ • ์‹œ๊ฐ = 598 + 10 = 608๋ถ„ (10์‹œ 8๋ถ„)

 

 

2๏ธโƒฃ ์ด๋ฒคํŠธ ๊ธฐ๊ฐ„ ์ค‘ ํ‰์ผ๋งŒ ๋น„๊ต ๋Œ€์ƒ์— ํฌํ•จ์‹œํ‚จ๋‹ค.

  • startday๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ด๋ฒˆ ์ฃผ์˜ ํ† ์š”์ผ๊ณผ ์ผ์š”์ผ์˜ ๋ฐฐ์—ด ์ธ๋ฑ์Šค๋ฅผ ๊ตฌํ•ด์•ผ ํ•œ๋‹ค.
startday = 5 (๊ธˆ์š”์ผ)์ธ ๊ฒฝ์šฐ
  → index 0: ๊ธˆ์š”์ผ
  → index 1: ํ† ์š”์ผ
  → index 2: ์ผ์š”์ผ
  → index 3: ์›”์š”์ผ
  ...

 

 

๐Ÿšจ ์ฃผ์˜ ์‚ฌํ•ญ

์—ฌ๊ธฐ์„œ ์ฃผ์˜ํ•ด์•ผํ•  ์ ์ด, ์‹ค์ œ ๋‚ ์งœ๋Š” ๋ฐฐ์—ด ์ธ๋ฑ์Šค 0 ~ 6์œผ๋กœ ํ‘œํ˜„ ๋œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

 

์ฆ‰, timelogs[i][0]์€ ์ด๋ฒคํŠธ ์ฒซ ๋‚  ์ถœ๊ทผ ๊ธฐ๋ก์ด๊ณ ,

timelogs[i][1]์€ ๋‘˜์งธ ๋‚  ์ถœ๊ทผ ๊ธฐ๋ก,

timelogs[i][6]์€ ๋งˆ์ง€๋ง‰ 7์ผ์ฐจ์˜ ์ถœ๊ทผ ๊ธฐ๋ก์ด๋‹ค.

 

ํ•˜์ง€๋งŒ, startday๋Š” 1~7๋กœ ํ‘œํ˜„๋œ๋‹ค.

 

๋”ฐ๋ผ์„œ ์ด ๋ถ€๋ถ„์„ ์ž˜ ๊ณ ๋ คํ•ด์„œ ์š”์ผ๊ณผ ์ธ๋ฑ์Šค๋ฅผ ๋งคํ•‘ํ•ด์•ผ ํ•œ๋‹ค.

 

 

 

 

 

๊ฒฐ๋ก ์ ์œผ๋กœ ๋‚˜๋Š” ์•„๋ž˜์˜ ๋ฐฉ๋ฒ•์œผ๋กœ ํ† ์š”์ผ๊ณผ ์ผ์š”์ผ์„ ์ฐพ์•„ ์ฃผ์—ˆ๋‹ค.

int saturday = (5 - (startday - 1) + 7) % 7;
int sunday = (6 - (startday - 1) + 7) % 7;

 

๋จผ์ €, startday๋Š” 1 ~ 7๋กœ ํ‘œํ˜„๋˜์ง€๋งŒ,

timelogs์—์„œ๋Š” 0~6์œผ๋กœ ์ผ์ฃผ์ผ์„ ํ‘œํ˜„ํ•˜๊ธฐ ๋•Œ๋ฌธ์—

(startday - 1)์„ ํ•ด์ฃผ์–ด์„œ ํ‘œํ˜„ ๋ฒ”์œ„๋ฅผ 0~6์œผ๋กœ ๋งž์ถฐ์ฃผ์—ˆ๋‹ค.

 

์ด๋ ‡๊ฒŒ ๋ณ€ํ™˜ํ•˜๊ณ  ๋‚˜๋ฉด,

์šฐ๋ฆฌ๊ฐ€ ์ฐพ๊ณ  ์‹ถ์€ ์š”์ผ์ธ ํ† ์š”์ผ๊ณผ ์ผ์š”์ผ์€ ๊ฐ๊ฐ 5์™€ 6์— ํ•ด๋‹นํ•˜๋ฏ€๋กœ 

(5 - (startday - 1))์„ ํ†ตํ•ด ์ด๋ฒคํŠธ ์‹œ์ž‘์ผ๋กœ๋ถ€ํ„ฐ ํ† ์š”์ผ์ด ๋ฉฐ์น  ํ›„์ธ์ง€ ๊ณ„์‚ฐํ•˜์˜€๊ณ ,

(6 - (startday - 1))์„ ํ†ตํ•ด ์ด๋ฒคํŠธ ์‹œ์ž‘์ผ๋กœ๋ถ€ํ„ฐ ์ผ์š”์ผ์ด ๋ฉฐ์น  ํ›„์ธ์ง€ ๊ณ„์‚ฐํ•˜์˜€๋‹ค.

 

์ด๋•Œ, ํ˜น์‹œ๋‚˜ ๊ฐ’์ด ์Œ์ˆ˜์ผ ์ˆ˜๋„ ์žˆ์œผ๋ฏ€๋กœ,

๊ฐ๊ฐ +7์„ ํ•ด์ฃผ์–ด ๋ฌด์กฐ๊ฑด ์–‘์ˆ˜๋กœ ์ฐจ๊ฐ€ ๋‚˜์˜ฌ ์ˆ˜ ์žˆ๋„๋ก ๋งž์ถฐ์ฃผ์—ˆ๋‹ค.

 

์ดํ›„ %7์„ ํ•˜๋ฉด timelogs์˜ ์ธ๋ฑ์Šค์—์„œ๋Š” ํ† ์š”์ผ๊ณผ ์ผ์š”์ผ์ด ๋ช‡ ๋ฒˆ์งธ์ธ์ง€ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

 

 

3๏ธโƒฃ ์ง์› ๋ณ„๋กœ ํ‰์ผ ์ถœ๊ทผ ์‹œ๊ฐ์„ ์ˆœํšŒํ•˜๋ฉฐ ๋น„๊ตํ•œ๋‹ค.

  • ๊ฐ ์ง์›์˜ ์ถœ๊ทผ ๊ธฐ๋ก (timelogs[i])์„ 7์ผ ๊ฐ„ ์ˆœํšŒํ•˜๋ฉด์„œ, ํ‰์ผ์—๋Š” ํ•ด๋‹น ๋‚ ์งœ์˜ ์ถœ๊ทผ ์‹œ๊ฐ์ด ์ธ์ • ์‹œ๊ฐ(ํฌ๋ง์‹œ๊ฐ + 10๋ถ„)๋ณด๋‹ค ๋Šฆ์ง€ ์•Š์•˜๋Š”์ง€๋ฅผ ํ™•์ธํ•ด์ค€๋‹ค.
  • ์ด๋•Œ, ํ•˜๋ฃจ๋ผ๋„ ์ง€๊ฐํ–ˆ๋‹ค๋ฉด, ํ•ด๋‹น ์ง์›์€ ์ƒํ’ˆ ์ง€๊ธ‰ ๋Œ€์ƒ์—์„œ ์ œ์™ธํ•œ๋‹ค.

 


๐Ÿ‘ฉ๐Ÿป‍๐Ÿ’ป ์ตœ์ข… ์ฝ”๋“œ

class Solution {
    public int solution(int[] schedules, int[][] timelogs, int startday) {
        int n = schedules.length;
        int[] flag = new int[n];
        
        int sunday = (6 - (startday - 1) + 7) % 7;
        int saturday = (5 - (startday - 1) + 7) % 7;
        
        int cnt = 0;
        
        for(int i = 0; i < n; i++){
            boolean on_time = true;
            
            int work_time = schedules[i];
            int work_time_hour = work_time / 100;
            int work_time_min = work_time % 100;
            int deadline = work_time_hour * 60 + work_time_min + 10;
                        
            for(int j = 0; j < 7; j++){
                if(j == saturday || j == sunday){
                    continue;
                }
                
                int real_time = timelogs[i][j];
                int real_time_hour = real_time / 100;
                int real_time_min = real_time % 100;
                int real = real_time_hour * 60 + real_time_min;
                
                if(real > deadline){
                    on_time = false;
                }
            }
            
            if(on_time){
                cnt++;
            }
        }
        
        return cnt;
    }
}

 

 


๐Ÿ•‘ ์‹œ๊ฐ„ ๋ณต์žก๋„

์ž…๋ ฅ ํฌ๊ธฐ

  • ์ง์› ์ˆ˜ = n (1  <= n <= 1000)
  • ์ง์› ๋‹น ์ผ์ฃผ์ผ ๊ธฐ๋ก = 7์ผ

 

์ฃผ์š” ๋ฃจํ”„

for(int i = 0; i < n; i++) { // ์ง์› ์ˆ˜ ๋งŒํผ
    ...
    for (int j = 0; j < 7; j++) { // ๊ฐ ์ง์›์˜ 7์ผ ์ถœ๊ทผ ๊ธฐ๋ก ๋งŒํผ
        ....
    }
}

 

 

์ด ์—ฐ์‚ฐ๋Ÿ‰

  • ์ตœ๋Œ€ 1000๋ช… * 7์ผ = 7000๋ฒˆ ๋น„๊ต

 

๐Ÿ‘‰๐Ÿป ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” O(n)    (์ด๋•Œ, n์€ ์ง์› ์ˆ˜)

       (๋‹จ, ๋‚ด๋ถ€ ๊ณ ์ • ๋ฃจํ”„(7์ผ)๋Š” ์ƒ์ˆ˜๋กœ ๊ฐ„์ฃผํ–ˆ๋‹ค.)

๋ฐ˜์‘ํ˜•