01.27 TIL

2023. 1. 27. 15:54개발일지

프로그래머스 "2016년" 풀이내용

public String solution(int a, int b){
    String answer = "";
    String[] day = {"FRI","SAT","SUN","MON","TUE","WED","THU"};
    int [] date = {31,29,31,30,31,30,31,31,30,31,30,31};
    int allDate = 0;
    for (int i = 0; i < a-1; i++) {
        allDate += date[i];
    }
    allDate +=(b-1);
    answer = day[allDate %7];
    return answer;
}

풀이

풀이 : 1월1일이 금요일이므로, 금요일부터 시작하여 달의 마지막날짜를 month 배열에 저장을 한다 그리고 date라는 변수를 초기값으로 선언 후
      반복문을 돌릴때 배열은 0부터 시작이므로 a-1까지 모든 월의 일수를 더하고 month[i]값을 i번째 더할때 date랑 같이 더해줍니다.
      d-1을 더함으로 1월 1일부터 a월 b일까지 모든 날짜를 더한 값을 얻습니다.
      모든 날짜를 더해 %7로 나눠준값을 리턴합니다.

"완주하지 못한 선수" 문제 풀이 중

오류

import가 문제인가 하면서 Arrays가 아니라 *로 바꿔도 똑같이

무엇이 문제인가 찾다가 HashMap을 안써서 그런가? 생각해서 배울겸 HashMap을 구글링 해봤습니다.

class Solution {
    public String solution(String[] participant, String[] completion) {
        String answer = "";
        HashMap<String, Integer> map = new HashMap<>();
        for (String player : participant)
            map.put(player, map.getOrDefault(player, 0) + 1);
        for (String player : completion)
            map.put(player, map.get(player) - 1);

        Iterator<Map.Entry<String, Integer>> iter = map.entrySet().iterator();

        while(iter.hasNext()){
            Map.Entry<String, Integer> entry = iter.next();
            if (entry.getValue() != 0){
                answer = entry.getKey();
                break;
            }
        }
        return answer;
    }
}
풀이 : String을 키로, Integer를 값으로 받는 HashMap을 선언하고, participant 요소를 탐색하면서 참가자 이름을 키로 하여 값을 1씩 증가시킨다.
      기본적으로 참가자들은 값 1을 가지지만, nikola라는 동명이인이 있다면 map의 nikola는 값 2를 가지게 된다.
      이후 completion 요소를 탐색하면서 완주자 이름을 키로 하여 값을 1씩 감소시킨다. 이 과정에서 완주하지 못한 사람은 값이 감소되지 않아 1을
      가지게 됩니다. 그리고 map을 탐색하며 값이 1인 키를 찾아 반환하면 됩니다.

ArraysList란 배열과 HashMap배열을 알게되었고 HashMap은 Key-Value값으로 받는다는 것을 배웠습니다

'개발일지' 카테고리의 다른 글

01.30 알고리즘  (0) 2023.01.30
01.28 TIL  (0) 2023.01.28
01.26 SOLID  (0) 2023.01.26
01.25 객체 지향 프로그래밍(Object Oriented Programming)  (0) 2023.01.26
01.25 TIL  (0) 2023.01.25