관리 메뉴

Binary Journey

[ν…Œμ½”ν…Œμ½”1.5 1-05] λ²„μŠ€ λ³Έλ¬Έ

Algorithm/ν…Œμ½”ν…Œμ½”1.5(2025.01)

[ν…Œμ½”ν…Œμ½”1.5 1-05] λ²„μŠ€

binaryJournalist 2025. 1. 12. 18:15
λ°˜μ‘ν˜•
πŸ’‘ν…Œμ½”ν…Œμ½” μ‹œμ¦Œ 1.5 1회 λͺ¨μž„ off-site 문제 ν’€μ΄μž…λ‹ˆλ‹€. (2025.01.12)

 

문제

 

좜처: ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€ - PCCE 기좜문제 07. λ²„μŠ€

 

λ‚΄μš©

 

μ˜μ§„μ΄λŠ” 약속μž₯μ†Œμ— κ°€κΈ° μœ„ν•΄ λ²„μŠ€λ₯Ό 타렀고 ν•©λ‹ˆλ‹€. λ²„μŠ€μ—λŠ” μ’Œμ„μ΄ 총 seat개만큼 μžˆμŠ΅λ‹ˆλ‹€. μ˜μ§„μ΄λŠ” λ²„μŠ€ μ’Œμ„μ— μ•‰μ•„μ„œ 갈 수 μžˆμ„μ§€ κΆκΈˆν•΄ν•©λ‹ˆλ‹€. κΈ°μ μ—μ„œ μΆœλ°œν•œ λ²„μŠ€κ°€ μ˜μ§„μ΄κ°€ κΈ°λ‹€λ¦¬λŠ” μ •κ±°μž₯에 λ„μ°©ν•˜κΈ° 전에 λ°©λ¬Έν•˜λŠ” 각 μ •κ±°μž₯μ—μ„œ 승/ν•˜μ°¨ν•œ 승객 정보가 μ£Όμ–΄μ§ˆ λ•Œ, μ˜μ§„μ΄κ°€ λ²„μŠ€μ— 탄 μˆœκ°„ 빈 μ’Œμ„μ€ λͺ‡ κ°œμΈμ§€ κ΅¬ν•΄μ£Όμ„Έμš”. μ˜μ§„μ΄κ°€ κΈ°λ‹€λ¦¬λŠ” μ •κ±°μž₯μ—μ„œλŠ” μ˜μ§„μ΄κ°€ 제일 λ¨Όμ € λ²„μŠ€μ— νƒ‘μŠΉν•˜λ©°, 이전 μ •κ±°μž₯μ—μ„œ λ²„μŠ€μ— νƒ‘μŠΉν•œ μŠΉκ°λ“€μ€ λ‚¨λŠ” μ’Œμ„μ΄ μžˆλ‹€λ©΄ 항상 μ•‰λŠ”λ‹€κ³  κ°€μ •ν•©λ‹ˆλ‹€. 또, κΈ°μ μ—μ„œ μΆœλ°œν•˜λŠ” λ²„μŠ€μ—λŠ” 승객이 0λͺ… 타고 μžˆμŠ΅λ‹ˆλ‹€.

예λ₯Ό λ“€μ–΄ λ‹€μŒμ€ μ’Œμ„μ΄ 5개인 λ²„μŠ€μ— 각 μ •κ±°μž₯μ—μ„œ 승/ν•˜μ°¨ν•œ 승객 정보λ₯Ό λ‚˜νƒ€λƒ…λ‹ˆλ‹€. μ˜μ§„μ΄λŠ” 4번 μ •κ±°μž₯μ—μ„œ 기닀리고 있으며, "On"은 μŠΉμ°¨ν•œ 승객, "Off"λŠ” ν•˜μ°¨ν•œ μŠΉκ°μ„ μ˜λ―Έν•©λ‹ˆλ‹€.

 

- 1번 μ •κ±°μž₯ : ["On", "On", "On"] (3λͺ… 승차, 0λͺ… ν•˜μ°¨)
- 2번 μ •κ±°μž₯ : ["Off", "On", "-"] (1λͺ… 승차, 1λͺ… ν•˜μ°¨)
- 3번 μ •κ±°μž₯ : ["Off", "-", "-"]  (0λͺ… 승차, 1λͺ… ν•˜μ°¨)

 

μœ„μ™€ 같은 경우, 1번 μ •κ±°μž₯μ—μ„œ 3λͺ…이 μŠΉμ°¨ν•˜κ³ , 2번 μ •κ±°μž₯μ—μ„œ 1λͺ… 승차 1λͺ… ν•˜μ°¨, 3번 μ •κ±°μž₯μ—μ„œ 1λͺ…이 ν•˜μ°¨ν–ˆμœΌλ―€λ‘œ 4번 μ •κ±°μž₯에 λ„μ°©ν•œ λ²„μŠ€μ—λŠ” 2λͺ…이 타고 μžˆμŠ΅λ‹ˆλ‹€. 4번 μ •κ±°μž₯μ—μ„œλŠ” μ˜μ§„μ΄κ°€ κ°€μž₯ λ¨Όμ € νƒ‘μŠΉν•˜λ―€λ‘œ, λ‚¨μ•„μžˆλŠ” μ’Œμ„ μˆ˜λŠ” 3κ°œμž…λ‹ˆλ‹€.

주어진 solutionν•¨μˆ˜λŠ” λ²„μŠ€μ˜ μ’Œμ„ 개수 seat, κΈ°μ μ—μ„œ μΆœλ°œν•œ λ²„μŠ€κ°€ μˆœμ„œλŒ€λ‘œ λ°©λ¬Έν•œ μ •κ±°μž₯μ—μ„œ 승객이 승/ν•˜μ°¨ν•œ 정보λ₯Ό 담은 2차원 λ¬Έμžμ—΄ 리슀트 passengersκ°€ μ£Όμ–΄μ§ˆ λ•Œ, λ²„μŠ€μ— λ‚¨μ•„μžˆλŠ” μ’Œμ„μ˜ 개수λ₯Ό return ν•˜λŠ” ν•¨μˆ˜μž…λ‹ˆλ‹€. solution ν•¨μˆ˜κ°€ μ˜¬λ°”λ₯΄κ²Œ μž‘λ™ν•˜λ„λ‘ λΉˆμΉΈμ„ μ±„μ›Œ solutionν•¨μˆ˜λ₯Ό μ™„μ„±ν•΄ μ£Όμ„Έμš”.

  • javaλ₯Ό μ‘μ‹œν•˜λŠ” 경우 λ¦¬μŠ€νŠΈλŠ” λ°°μ—΄, ν•¨μˆ˜λŠ” λ©”μ†Œλ“œμ™€ λ™μΌν•œ μ˜λ―Έμ΄λ‹ˆ 풀이에 μ°Έκ³ ν•΄μ£Όμ„Έμš”.
    • ex) solution ν•¨μˆ˜κ°€ μ˜¬λ°”λ₯΄κ²Œ μž‘λ™ν•˜λ„λ‘ ν•œ 쀄을 μˆ˜μ •ν•΄ μ£Όμ„Έμš”. => solution λ©”μ†Œλ“œκ°€ μ˜¬λ°”λ₯΄κ²Œ μž‘λ™ν•˜λ„λ‘ ν•œ 쀄을 μˆ˜μ •ν•΄ μ£Όμ„Έμš”.

 

 

μ œμ•½ 쑰건

  • 1 ≤ seat ≤ 30
  • 1 ≤ passengers의 길이 ≤ 10
  • 1 ≤ passengers[i]의 길이 ≤ 20
    • passengers[0]은 1번 μ •κ±°μž₯, passengers[1]은 2번 μ •κ±°μž₯, … passengers[i]λŠ” i + 1번 μ •κ±°μž₯의 μ •λ³΄μž…λ‹ˆλ‹€.
    • passengers의 길이가 n이라면, μ˜μ§„μ΄λŠ” n + 1번 μ •κ±°μž₯μ—μ„œ 기닀리고 μžˆμŠ΅λ‹ˆλ‹€.
  • passengers[i]의 κΈΈμ΄λŠ” λͺ¨λ‘ λ™μΌν•©λ‹ˆλ‹€.
  • passengers[i]의 μ›μ†ŒλŠ” "On", "Off" λ˜λŠ” "-"μž…λ‹ˆλ‹€.
    • "-"λŠ” λ°°μ—΄μ˜ κ°€λ‘œ(μ—΄) 길이λ₯Ό λ§žμΆ”κΈ° μœ„ν•œ μš”μ†Œλ‘œ, μ•„λ¬΄λŸ° μ˜λ―Έλ„ μ—†μŠ΅λ‹ˆλ‹€.
    • "-"κ°€ "On", "Off" 사이에 μžˆλŠ” κ²½μš°λŠ” μ—†μŠ΅λ‹ˆλ‹€.

 

κΈ°λ‘ν•˜κΈ°

πŸ’‘ μ–΄λ””κΉŒμ§€ μƒκ°ν•΄λ΄€λŠ”μ§€ λ‹¨κ³„μ μœΌλ‘œ κΈ°λ‘ν•΄λ΄…λ‹ˆλ‹€.

 

μ–΄λ–€ μ•Œκ³ λ¦¬μ¦˜μ„ μ μš©ν•˜λ € ν–ˆλ‚˜μš”?

 

μŠ€νƒμ„ μ‚¬μš©ν•˜κ³  μ‹Άλ‹€. (λ§Œλ¬ΌμŠ€νƒμ„€ γ…‹γ…‹) κ·ΈλŸ¬λ‚˜ λ¬Έμ œλŠ” 숫자 μ—°μ‚°μœΌλ‘œ λ¨Όμ € ν’€μ΄λ˜μ–΄ μžˆλ‹€.

 

적용 κ·Όκ±°λŠ” λ¬΄μ—‡μΈκ°€μš”?

 

μˆœμ„œ 상관없이 λ²„μŠ€ μŠΉν•˜μ°¨ 인원에 따라 남은 λ²„μŠ€ μ’Œμ„μ„ κ΅¬ν•˜λ©΄ λ˜λ―€λ‘œ μŠ€νƒ μ‚¬μš©ν•΄λ„ 될 것 κ°™μ•˜λ‹€.
ν•˜μ§€λ§Œ 숫자 μ—°μ‚°μœΌλ‘œ λ¨Όμ € ν’€μ΄λ˜μ–΄ μžˆμœΌλ‹ˆ λ¬Έμ œμ— 맞좰 풀이해보고 μŠ€νƒμœΌλ‘œλ„ κ°€λŠ₯ν•˜λ©΄ μŠ€νƒμœΌλ‘œ λ³€ν˜•λ„ 해보겠닀.

 

 

풀이

풀이 μ‹œκ°„

 

μ‹œμž‘ μ‹œκ° μ’…λ£Œ μ‹œκ° 총 μ†Œμš” μ‹œκ°„
12:53 13:06 13λΆ„

 

문제 뢄석

 

μž…λ ₯κ°’ 뢄석

πŸ’‘ μž…λ ₯값을 λΆ„μ„ν•˜λ©΄ λ¬Έμ œμ—μ„œ μš”κ΅¬ν•˜λŠ” μ•Œκ³ λ¦¬μ¦˜μ˜ μ‹œκ°„ λ³΅μž‘λ„λ₯Ό κ°„μ ‘μ μœΌλ‘œ νŒŒμ•…ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

 

seat passengers result
5 [["On", "On", "On"], ["Off", "On", "-"], ["Off", "-", "-"]] 3
10 [["On", "On", "On", "On", "On", "On", "On", "On", "-", "-"], ["On", "On", "Off", "Off", "Off", "On", "On", "-", "-", "-"], ["On", "On", "On", "Off", "On", "On", "On", "Off", "Off", "Off"], ["On", "On", "Off", "-", "-", "-", "-", "-", "-", "-"]] 0

 

 

μž…μΆœλ ₯ 예 #1

  • 지문과 λ™μΌν•©λ‹ˆλ‹€

 

μž…μΆœλ ₯ 예 #2

 

μ•„λž˜μ™€ 같이 승객이 타고 λ‚΄λ Έκ³  λ§ˆμ§€λ§‰μœΌλ‘œ 12λͺ…이 λ²„μŠ€μ— 타고 μžˆμœΌλ―€λ‘œ 남은 μ’Œμ„μ€ 0κ°œμž…λ‹ˆλ‹€.

- 1번 μ •κ±°μž₯ : ["On", "On", "On", "On", "On", "On", "On", "On", "-", "-"] (8λͺ… 승차, 0λͺ… ν•˜μ°¨)
- 2번 μ •κ±°μž₯ : ["On", "On", "Off", "Off", "Off", "On", "On", "-", "-", "-"] (4λͺ… 승차, 3λͺ… ν•˜μ°¨)
- 3번 μ •κ±°μž₯ : ["On", "On", "On", "Off", "On", "On", "On", "Off", "Off", "Off"] (6λͺ… 승차, 4λͺ… ν•˜μ°¨)
- 4번 μ •κ±°μž₯ : ["On", "On", "Off", "-", "-", "-", "-", "-", "-", "-"] (2λͺ… 승차, 1λͺ… ν•˜μ°¨)

 

 

μ˜μ‚¬ μ½”λ“œ μž‘μ„±

πŸ’‘ μ˜μ‚¬ μ½”λ“œλŠ” λ™μž‘ μ€‘μ‹¬μœΌλ‘œ μž‘μ„±ν•˜λŠ” 것이 μ€‘μš”ν•©λ‹ˆλ‹€.

πŸ’‘ μ˜μ‚¬ μ½”λ“œλŠ” 문제 ν•΄κ²° μˆœμ„œλ‘œ μž‘μ„±ν•©λ‹ˆλ‹€.

πŸ’‘ μ˜μ‚¬ μ½”λ“œλ₯Ό μΆ©λΆ„νžˆ ν…ŒμŠ€νŠΈν•΄λ΄…λ‹ˆλ‹€.

 

(κΈ°μ‘΄ μ½”λ“œλŠ” μ΄λ ‡κ²Œ κ΅¬ν˜„λ˜μ–΄ μžˆμ—ˆλ‹€.)

class Solution {
    public int solution(int seat, String[][] passengers) {
        int num_passenger = 0;
        for(int i=0; i<passengers.length; i++){
            num_passenger += func;
            num_passenger -= func;
        }
        int answer = func;
        return answer;
    }

    public int func1(int num){
        if(0 > num){
            return 0;
        }
        else{
            return num;
        }
    }
    public int func2(int num){
        if(num > 0){
            return 0;
        }
        else{
            return num;
        }
    }

    public int func3(String[] station){
        int num = 0;
        for(int i=0; i<station.length; i++){
            if(station[i].equals("Off")){
                num += 1;
            }
        }
        return num;
    }

    public int func4(String[] station){
        int num = 0;
        for(int i=0; i<station.length; i++){
            if(station[i].equals("On")){
                num += 1;
            }
        }
        return num;
    }
}

 

 

κ΅¬ν˜„

class Solution {
    public int solution(int seat, String[][] passengers) {
        int num_passenger = 0;
        for(int i=0; i<passengers.length; i++){
            num_passenger += func4(passengers[i]);
            num_passenger -= func3(passengers[i]);
        }
        int answer = func1(seat - num_passenger);
        return answer;
    }

    public int func1(int num){
        if(0 > num){
            return 0;
        }
        else{
            return num;
        }
    }
    public int func2(int num){
        if(num > 0){
            return 0;
        }
        else{
            return num;
        }
    }

    public int func3(String[] station){
        int num = 0;
        for(int i=0; i<station.length; i++){
            if(station[i].equals("Off")){
                num += 1;
            }
        }
        return num;
    }

    public int func4(String[] station){
        int num = 0;
        for(int i=0; i<station.length; i++){
            if(station[i].equals("On")){
                num += 1;
            }
        }
        return num;
    }
}
public static int solution(int seat, String[][] passengers) {  
    Stack<String> stack = new Stack<>();  

    for (String[] passenger : passengers) {  
        for (String p : passenger) {  
            if (p.equals("On")) {  
                stack.push(p);  
            } else if (p.equals("Off") && !stack.isEmpty()) {  
                stack.pop();  
            }  
        }  
    }  

    return Math.max(0, seat - stack.size());  
}

 

λ³΅κΈ°ν•˜κΈ°

λ‹΅μ•ˆκ³Ό λ‚˜μ˜ 풀이λ₯Ό λΉ„κ΅ν•΄λ³΄μ„Έμš”

  • 근데 λ­˜ν•΄λ„ μ‹œκ°„λ³΅μž‘λ„λŠ” O(N^2)라 λ©”λͺ¨λ¦¬ 효율 μƒκ°ν•˜λ©΄ 숫자 μ—°μ‚° λ°©μ‹μœΌλ‘œ ν•˜λŠ” 게 λ‚˜μ„μ§€λ„..
λ°˜μ‘ν˜•