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 |