문제
월 일을 입력받고 요일 출력하는 코드 구현하기
(보잘것없는 나의) 답:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int x = sc.nextInt();
int y = sc.nextInt();
// 달마다 더할 3월 1일 = ( 1월 + 2월 + y) % 7
// 1~7제외 나눈 나머지가 1 월 2 화 3 수 4 목 5 금 6 토 0일
int[] monthDays = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
int sum = 0;
if (x == 1) {
sum = 0;
} else {
for (int i = 0; i < x-1; i++) {
sum += monthDays[i];
}
}
int finalDays = sum + y;
String Day = " ";
switch(finalDays%7) {
case 1: Day = "MON"; break;
case 2: Day = "TUE";break;
case 3: Day = "WED";break;
case 4: Day = "THU";break;
case 5: Day = "FRI";break;
case 6: Day = "SAT";break;
case 0: Day = "SUN";break;
}
System.out.println(Day);
}
}
이 코드가 효율적인지 어쩐지 모르겠고,
일단 풀었움!~!
코드 자체는 쉬운 코드인데
이렇게 할 방법을 생각하는 게 어려웠다.
사실 혼자 고민해보다가 아예 감도 안 와서 힌트를 살짝 보긴 했지만... (7로 나누라는 것만 봄..)
완전 장족의 발전 아닌감?
자바 본격적으로 배운 지 한 2주밖에 안됐는데 나 잘하고 있나 봐 ㅎㅎ
이 문제를 처음 봤을 때 느낀 그 막막함이 아직도 느껴지는데
내가 이걸 풀다니~
풀고 나니 급 쉬워 보이는 magic ☆
앞으로 더 어려운 문제들도 풀어봐야겠다~ 재밌네
다른 사람 코드 보면 도움된다고 그래서 다른 사람들은 어떻게 풀었나 봤는데 대박 좋아 보이는 코드 발견~
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int x,y = 0;
int[] month = {31,28,31,30,31,30,31,31,30,31,30,31};
String[] week ={"SUN","MON","TUE","WED","THU","FRI","SAT"};
x = sc.nextInt();
y = sc.nextInt();
for(int i=0; i<x-1; i++){
y += month[i];
}
y = y%7;
System.out.println(week[y]);
sc.close();
}
}
출처:https://mthsel.tistory.com/55
놀란 점
1. 아닛... 요일을 배열에 넣을 생각을 다 하다니..!??!
다시 보니까 진짜 배열에 넣기 딱 좋게 생김!?!??!
2. 나는 월이 1일 경우를 대비해서 if조건문으로 1일경우 월을 더해주는 반복문에서 빠져나오도록 했는데 저 코드를 보고 생각해보니 x-1은 0이니까 1월을 바로 대입해도 for(int i = 0; i < x-1 <= 이 조건에 부합 안돼서 if문 안 써도 빠져나옴..!
3. 나는 값을 더할 변수를 2개(sum이랑 finalDays)나 더 만들었는데 저 코드는 y에 다 대입해버림..! 메모리 낭비 방지?!?
쩌는디?
...
ㅋㅋㅋㅋㅋ
난 아직 멀었다
고쳐본 나의 코드
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int x = sc.nextInt();
int y = sc.nextInt();
int[] monthDays = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
String[] Day = { "SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT" };
for (int i = 0; i < x - 1; i++) {
y += monthDays[i];
}
System.out.println(Day[y%7]);
}
}
훨씬 간결해졌다.
거의 절반이 없어짐ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ
만족스럽군
'with my rubber duck > codingTest' 카테고리의 다른 글
백준 10818 최소, 최대 / 언제쯤 혼자서 풀 수 있을까... (0) | 2022.04.05 |
---|---|
백준 8393 합 아 짱쉽네이거~ (0) | 2022.04.04 |
bubble sorting (0) | 2022.03.30 |
백준 2739 구구단전문가 나야나 (0) | 2022.03.29 |
백준 2742 기찍 N (0) | 2022.03.29 |
댓글