본문 바로가기
카테고리 없음

99클럽 코테 스터디 8일차 TIL + 근무지옥에빠진푸앙이

by leek94 2024. 11. 4.


- 오늘의 학습 키워드 : map을 사용한 중복값 연산, %를 활용한 주차별 값, int [], 



- 오늘의 회고
  - 어떤 문제가 있었고, 나는 어떤 시도를 했는지

Map으로 값을 저장해서 중복되는 값을 처리해야함


  - 어떻게 해결했는지

 getOrDefault("key", 0) 을 사용해서 더해주었음


  - 무엇을 새롭게 알았는지

1. Collections.max() , Collections.min() 이라는 메서드 통해서 벨류의 값을 최대 / 최소 값을 출력할 수 있다는 걸 처음 알았다. 몰랐다면 int min ,int max를 선언해서 값을 for문을 통해서 찾았을 거 같다.

2. 값이 전부 없다는 반례를 생각하지 못해서 오래 걸림.
  

 

문제

 

 

근무 지옥에 빠진 푸앙이 (Small)

시간 제한메모리 제한제출정답맞힌 사람정답 비율
1 초 1024 MB 819 366 316 46.884%

문제

군대에 간 푸앙이는 4교대 근무를 서게 된다. 근무 시간대는 08:00~12:00, 12:00~18:00, 18:00~22:00, 22:00~08:00 으로 각각 4, 6, 4, 10시간의 근무로 구성되어 있다.푸앙이와 동기들은 근무 시간이 최대한 공평하게 배분되기를 원한다. 그래서 근무표 전체에서 각 인원의 근무 시간이 12시간 이하로 차이 나게 해서 최대 50주 치 근무표를 짜려고 한다.푸앙이는 원래 똑똑해서 이 정도는 한눈에 계산이 가능했지만 어째서인지 푸앙이는 계산이 불가능해졌다. 푸앙이를 위해서 대신 근무표가 공평한지 계산해주자.

입력

첫 번째 줄에 주의 개수인 N이 입력된다. (1 ≤ N ≤ 50)둘째 줄부터 근무표가 주어진다. 각 주는 4개의 줄로 표현되며, 그중 첫째 줄은 각 날의 08:00~12:00에 근무하는 사람의 이름 또는 '-', 둘째 줄은 12:00~18:00, 셋째 줄은 18:00~22:00, 넷째 줄은 22:00~08:00을 나타낸다. '-'는 근무자가 없음을 의미한다. 근무자의 이름은 모두 알파벳 소문자로 이루어져 있고 20글자를 넘지 않는다.각 날에는 4개의 시간대에 모두 근무자가 있거나 모두 근무자가 없다. 예를 들어 12:00~18:00에만 근무자가 있는 날은 없다.근무표에 적히지 않은 근무자는 없으며, 근무자 수는 최대 100명이다.

출력

근무표가 공평하면 "Yes"를 아니면 "No"를 출력한다. 단, 아무도 근무하지 않을 경우 공평한 것으로 간주한다.

풀이 코드

 

예제

입력

4
- - - - - pangyo puang
- - - - - sally boss
- - - - - leonard brown
- - - - - edward edward
puang pangyo choco leonard cony leonard choco
cony edward cony leonard moon puang edward
choco boss puang brown brown pangyo cony
choco edward puang cony moon choco boss
brown moon moon sally pangyo puang choco
pangyo edward boss sally moon cony pangyo
brown puang james moon cony choco choco
sally brown sally puang james moon sally
leonard pangyo - - - - -
boss choco - - - - -
moon edward - - - - -
moon sally - - - - -

 

출력

No

 

입력

4
- - - - - sally boss
- - - - - brown boss
- - - - - moon sally
- - - - - leonard edward
pangyo moon cony boss james sally brown
moon brown sally cony brown choco edward
moon leonard pangyo moon edward puang puang
leonard sally boss choco cony boss edward
brown sally jessica leonard moon jessica james
jessica brown leonard puang james pangyo puang
puang choco james cony jessica pangyo jessica
pangyo jessica choco james puang cony pangyo
moon moon james choco edward - -
jessica brown james sally puang - -
cony leonard moon boss choco - -
edward jessica cony brown leonard - -

 

출력 

Yes

 

 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import java.util.StringTokenizer;


public class BOJ25593_근무지옥에빠진푸앙이 {

    public static void main(String[]args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());

        int N = Integer.parseInt(st.nextToken());
        Map<String, Integer> map = new HashMap<>();

        int[] time = {4, 6, 4, 10}; // 근무 시간

        // 주차별로 값을 받아서 저장
        for( int i = 0; i < N * 4; i++ ){
            int currentTime = time[i % 4];

            st = new StringTokenizer(br.readLine());
            for( int j = 0; j < 7; j++){

                String name = st.nextToken();
                if(!name.equals("-")){
                    map.put(name, map.getOrDefault(name, 0) + currentTime);
                }
            }
        }

        // 모든 값이 없을 경우 처리하는 구문
        if(map.isEmpty()) {
            System.out.println("Yes");
            return;
        }

        // 최소 / 최대값 구하는 문
        Integer maxValue = Collections.max(map.values());
        int minValue = Collections.min(map.values());

//        System.out.println("min : " + minValue + " ," + "max: " + maxValue);

        // 값으로 출력값 정하는 구문
        if(maxValue - minValue <= 12) {
            System.out.println("Yes");
        } else {
            System.out.println("No");
        }


    }
}