본문 바로가기
with my rubber duck/codingTest

백준 1924 자바 내가 이걸 풀다니

by stilinski 2022. 4. 2.
728x90

문제 

월 일을 입력받고 요일 출력하는 코드 구현하기

 

 

 

 

 

 

 

(보잘것없는 나의) 답:

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

 

[백준] 1924번 - 2007년 (Java)

먼 훗날.. "'이렇게 멍청했나..?'라고 이야기할 수 있는 날이 오겠지..? "라며 시작하는 알고리즘 공부 일지.. 머리가 똥으로만 가득 찬 나는 아주아주 기초 빼고는 막히기 시작했다. https://www.acmicpc

mthsel.tistory.com

놀란 점

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]);
		
		

	}
}

 

전 후

훨씬 간결해졌다.

거의 절반이 없어짐ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ

만족스럽군

 

 

728x90

댓글