-
[Java] - 2016년 (12901) (switch 문)알고리즘/프로그래머스 2024. 3. 6. 10:17
📚 문제 - 12901
2016년 1월 1일은 금요일입니다. 2016년 a월 b일은 무슨 요일일까요? 두 수 a ,b를 입력받아 2016년 a월 b일이 무슨 요일인지 리턴하는 함수, solution을 완성하세요. 요일의 이름은 일요일부터 토요일까지 각각SUN,MON,TUE,WED,THU,FRI,SAT 입니다. 예를 들어 a=5, b=24라면 5월 24일은 화요일이므로 문자열 "TUE"를 반환하세요.
제한사항- 2016년은 윤년입니다.
- 2016년 a월 b일은 실제로 있는 날입니다. (13월 26일이나 2월 45일같은 날짜는 주어지지 않습니다)
입출력 예
a b result 5 24 "TUE" ⌨️ 작성한 코드
class Solution { public String solution(int a, int b) { int[] daysInMonth = {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; String[] daysOfWeek = {"FRI", "SAT", "SUN", "MON", "TUE", "WED", "THU"}; // 1월1일부터 a월 b일까지 일 수 계산 int totalDays = 0; for (int i = 0; i < a - 1; i++) { totalDays += daysInMonth[i]; } //totalDays에는 1월 1일이 포함되어 있으므로 1 빼기 totalDays += b - 1; // 2016년 1월 1일이 금요일이므로 금요일부터 시작하여 계산 return daysOfWeek[totalDays % 7]; } }
- 접근 방식:
문제를 보고 총 일 수를 계산해서 7로 나누면 무슨 요일인지 알 수 있을 거라 생각했다. 그래서 1월부터 각 월마다의 일수를 담은 배열을 만들어서 for문을 통해 일 수의 합을 totalDays에 넣었다. 이를 나눈 나머지 값을 통해 무슨 요일인지를 출력하도록 했다. - 문제&해결: 처음에는 totalDays를 계산할 때 -1을 하지않아서 틀렸었다. 1월 1일, 즉 하루가 포함되어있던 것을 빼주니까 정답이 도출되었다.
👀 좋아요 98개의 다른 사람의 풀이
class TryHelloWorld { public String getDayName(int a, int b) { String answer = " "; int[] monthDay={31,29,31,30,31,30,31,31,30,31,30,31}; for (int i = 1; i < a; i++) { b+=monthDay[i-1]; } switch(b%7){ case 3:answer="SUN";break; case 4:answer="MON";break; case 5:answer="TUE";break; case 6:answer="WED";break; case 0:answer="THU";break; case 1:answer="FRI";break; case 2:answer="SAT";break; } return answer; } }
✅ 배운 점
switch 문: 여러 가지 경우에 따라 다른 동작을 수행할 때 사용한다.
주로 특정 변수의 값을 기반으로 다른 코드 블록을 실행하는 데에 쓰인다. 변수가 각 case에 해당하는 값과 일치하는 경우, 해당 case의 코드 블록이 실행된다. 만약 어떤 case도 해당되지 않는다면 default 문 아래의 코드 블록이 실행된다.주의할 점은 각 case 끝에는 반드시 break 문을 사용하여 switch 문을 빠져나와야 한다는 것이다. 그렇지 않으면 다음 case들도 실행될 수 있기 때문이다.
switch (변수) { case 값1: // 값1에 해당하는 동작 수행 break; case 값2: // 값2에 해당하는 동작 수행 break; ... default: // 위의 case에 해당하지 않는 경우 수행할 동작 }
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[Java] - 과일 장수 (135808) (역순 정렬/ Comparator, Collections.reverseOrder()) (0) 2024.03.07 [Java] - 폰켓몬 (1845) (HashSet) (0) 2024.03.06 [Java] - 카드 뭉치 (159994) (equals()/ == 연산자/ compareTo()) (0) 2024.03.05 [Java] - 명예의 전당 (1) (138477) (PriorityQueue) (0) 2024.03.05 [Java] - 가장 가까운 같은 글자 (142086) (LinkedHashMap) (0) 2024.03.04