[Info]Tags categorized posts and contents patterns..

[AJAX] Ajax Code E xamples.. [Book] About the book.. [CSS] CSS Code E xamples.. [DB] Sql Code E xamples.. [DEV] All development stor...

레이블이 인 게시물을 표시합니다. 모든 게시물 표시
레이블이 인 게시물을 표시합니다. 모든 게시물 표시

2016년 8월 22일 월요일

[JAVA] Baekjoon 1부터 N까지 합을 구합니다..

대망의 for 마지막 문제다.. 어느덧 마지막 문제라니 다음 단계의 주제인 if 들어가기전에 랭킹이나 올려볼까 싶기도 하고 ㅎㅎㅎ.. 랭킹이라고 하기에도 웃기지만 말이지.. 등수가 천단위라서 ㅋㅋㅋ..

문제
n이 주어졌을 때, 1부터 n까지 합을 구하는 프로그램을 작성하시오.

입력
첫째 줄에 n (1 ≤ n ≤ 10,000)이 주어진다.

출력
1부터 n까지 합을 출력한다.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
package Code_201608;

import java.util.Scanner;

public class PrintForSum {

    @SuppressWarnings("resource")
    public static void main(String[] args) {
  
        Scanner scan = new Scanner(System.in);
        
        //int sumNum = 3;
        int sumVal = 0;
        
        int sumNum = scan.nextInt();
  
        for(int i = 1; i <= sumNum; i++) {
            sumVal += i;
        }
        System.out.println(sumVal);
    }

}//




이번 문제는 그동안 고민하면서 풀던 문제들에 비하면 상당히 쉽다.. 증감에 대한 개념만 갖고 있다면 금세 풀리니 말이다..


어차피 기본 for 는 누구나 한다고 쳤을 때 18 라인 증감[+=]에 대한 부분이 가장 핵심이다..

[JAVA] Baekjoon 2007년 x월 y일이 무슨 요일인지 알아내보기..

for 코딩 테스트도 이제 막바지에 이르고 있다.. 고민하는걸 싫어하는편이긴 하지만 그래도 어쩌겠는가.. 개발자로 살고자한다면.. 그에 합당한 노력을 해야지.. 머 그렇다고 엄청나게 하는것도 아니긴 하지만.. ㅎㅎㅎ..

문제
오늘은 2007년 1월 1일 월요일이다. 그렇다면 2007년 x월 y일은 무슨 요일일까? 이를 알아내는 프로그램을 작성하시오.

입력
첫째 줄에 빈 칸을 사이에 두고 x(1≤x≤12)와 y(1≤y≤31)이 주어진다. 참고로 2007년에는 1, 3, 5, 7, 8, 10, 12월은 31일까지, 4, 6, 9, 11월은 30일까지, 2월은 28일까지 있다.

출력
첫째 줄에 x월 y일이 무슨 요일인지에 따라 SUN, MON, TUE, WED, THU, FRI, SAT중 하나를 출력한다.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
package Code_201608;

import java.util.Scanner;

public class PrintFor2007 {

    @SuppressWarnings("resource")
    public static void main(String[] args) {
  
        Scanner scan = new Scanner(System.in);
        String[] monthVal = {"SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT"};
        
        //int monVal = 1;
        //int dayVal = 1;
        
        int monVal = scan.nextInt();
        int dayVal = scan.nextInt();
  
        //월은 눈에보이는 월이 아닌 그 이전까지 계산 후 + 일을 한다
        for(int i = 1; i < monVal; i++) {
            if(i == 4 || i == 6 || i == 9 || i == 11) {
                dayVal = dayVal + 30;
          
            } else if(2 == i) {
                dayVal = dayVal + 28;
          
            } else {
                dayVal = dayVal + 31;
            }
        }
        //System.out.println(dayVal % 7);
        System.out.println(monthVal[dayVal % 7]);
    }

}//




문제를 보면 거창해 보이지만, 실제 코딩된 소스는 그렇게 길지는 않다.. 코딩 테스트 문제가 너무 길어도 문제긴 하겠지만 말이지.. ㅎㅎㅎ..

해당 문제에서 가장 핵심은 달[Month]에 대한 개념을 어떻게 잡느냐이다.. 19라인 주석에도 설명을 하긴 했지만 난 처음에 눈에 보이는 그대로 1월부터 3월 혹은 1월부터 6월 해서 3번, 6번을 for 가 돌아야된다고 생각을 했다..

그런데 그렇게하면 절대 답이 안나오지.. 우리가 5월 1일에 해당하는 요일을 구한다고 치면, 5번의 for 가 아닌 4번의 for 가 돌아야된다.. 왜냐면 1월부터 4월까지 총 4번 그리고서 그 이후에 1일을 더하는 개념이 되는 것이기 때문이다.. 아흐 난 첨에 이걸 그렇게 생각을 못해서 계속 삽질을 하면서 왜 답이 안나오지..?? 이 생각만 했다.. ㅋㅋ

난 처음에 for(int i = 1; i < 6; i++) 이런식으로 되야 한다고 생각을 했다.. 5번이 for 가 수행하도록 하지만 그것이 아닌 for(int i = 1; i < 5; i++) 가 되고 4번 수행하도록 코딩을 해야된다.. 그래야지만 위에 잠시 언급한 개념과 맞는 코딩이 되는 것이다..

그 이후에는 머 좀 심플하다.. 각각의 월에 대한 날짜 기준이 있으니 그것대로 if 문을 구성해주면 되겠다.. 출력은 최종적으로 나온 값을 나눈 후에 그 값에 대한 것을 배열로 따져서 요일을 보여주면 된다.. 즉, monthVal[dayVal % 7]