[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...

레이블이 for문 사용해보기인 게시물을 표시합니다. 모든 게시물 표시
레이블이 for문 사용해보기인 게시물을 표시합니다. 모든 게시물 표시

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]

2016년 8월 19일 금요일

[JAVA] Baekjoon 첫째 줄에는 별 N개, 둘째 줄에는 별 N-1개, ..., N번째 줄에는 별 1개를 출력해 봅니다. (오른쪽 정렬)..

별출력 끝판왕이다.. 말이 좀 웃긴가.. 무튼 마지막 문제인데 5 to 1 을 해봤으니 당연히?? 자연스럽게 5 to 1 에 대한 오른쪽 정렬을 해봐야겠지.. ㅎㅎ

문제
첫째 줄에는 별 N개, 둘째 줄에는 별 N-1개, ..., N번째 줄에는 별 1개를 찍는 문제

하지만, 오른쪽을 기준으로 정렬한 별 (예제 참고)을 출력하시오.

입력
첫째 줄에 N (1<=N<=100)이 주어진다.

출력
첫째 줄부터 N번째 줄 까지 차례대로 별을 출력한다.

 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
package Code_201608;

import java.util.Scanner;

public class PrintForStarFour {

    @SuppressWarnings("resource")
    public static void main(String[] args) {
  
        Scanner scan = new Scanner(System.in);
  
        //int a = 5;
        int a = scan.nextInt();
  
        for(int i = 1; i <= a; i++) { //세로
   
            for(int j = 1; j <= i - 1; j++) { //가로, 공백을 우선 출력
                System.out.print(" ");
                //System.out.print("@");
            }
            for(int k = a; k >= i; k--) { //가로, 공백 제외한 공간을 * 로 출력
                System.out.print("*");
            }
            System.out.println("");
        }
    }

}//





이 문제 역시 고민을 좀 했는데.. 별 출력 4문제중에 제일 고민을 오래 했다.. ㅎㅎㅎㅎ.. 이놈의 실력이;;;


여기서도 역시나 난 공백을 어떻게 찍어야되지부터 고민의 첫 출발선이었다.. 우선 좌측에 공백을 찍는데 5 to 1 을 우측정렬을 해야되니까 좌측 공백은 0 to 4 가 되어야 한다.. 그러다보니 첫 for 는 1 부터 시작을 해서 세로 i 에 대해서 - 1 이 되어야 했다..

또한, 공백을 생각해서 찍어뒀으니 이제는 나머지 우측이 고민이었다.. 우측은 입력값에 대해서 역으로 줄여가면 되니 우선 첫 시작점은 a 였고, 그 다음은 세로 i 보다 크거나 같을 때까지 줄여나가면 출력이 정상적으로 됬다..

지금이야 물론 위와 같이 설명이 가능하지만 고민을 하면서 코딩을 할 때는 최종 제출하기전까지 많이 틀렸다.. 내가 스타일상 고민을 해서 한방에 짠!!! 하고 코딩하는 스타일이 아니어서 출력을 해보고 수정을 하면서 그 안에서 패턴을 찾고, 정답을 찾아냈다..

한방에 답을 찾으면 좋겠지만, 무엇보다 이정도의 초급 문제는 그래야 되는것이 당연할 수도 있지만 답을 찾아가는 과정이 더 중요하고 나 스스로 고민을 해보는 것이 중요하다고 생각하면서.. 별들이여 안녕.. 



[JAVA] Baekjoon 첫째 줄에는 별 N개, 둘째 줄에는 별 N-1개, ..., N번째 줄에는 별 1개를 출력해 봅니다..

이젠 별을 반대로 출력할 순서다.. 1 to 5 였다면, 이제는 5 to 1 이란 소리징..

문제
첫째 줄에는 별 N개, 둘째 줄에는 별 N-1개, ..., N번째 줄에는 별 1개를 찍는 문제

입력
첫째 줄에 N (1<=N<=100)이 주어진다.

출력
첫째 줄부터 N번째 줄 까지 차례대로 별을 출력한다.

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

import java.util.Scanner;

public class PrintForStarThree {

    @SuppressWarnings("resource")
    public static void main(String[] args) {
  
        Scanner scan = new Scanner(System.in);
  
        //int a = 5;
        int a = scan.nextInt();
  
        for(int i = 1; i <= a; i++) { //세로
   
            for(int j = i; j <= a; j++) { //가로, 기준이 i 부터 a 까지 채워질 때 까지
                System.out.print("*");
            }
            System.out.println("");
        }
    }

}//





이번 문제에서도 난 역시나 손쉽게 딱!!! 구하지는 못하고 좀 고민을 했다.. 어떻게 하면 역순으로 하지..??


세로 i 에 대해서 가로 j 와 입력으로 들어올 a 에 대한 범위를 어떻게 정해주느냐가 핵심이었다.. 처음에는 무조건 순차적으로 1부터.. 1부터 이것만 생각하다보니 더 난관에 빠졌는데.. 여기서도 역시나 문제를 풀고보면, 너무 하나의 시점에 빠져서는 문제를 풀기가 쉽지 않다는 교훈을 얻게 된 나다..

[JAVA] Baekjoon 첫째 줄에는 별 1개, 둘째 줄에는 별 2개, N번째 줄에는 별 N개 출력해 봅니다. (오른쪽 정렬)..

드디어 올것이 왔구나.. 이번 별출력 문제는 생각을 조금 더 해야된다.. 순차적으로 별을 늘려가면서 출력하는 것 뿐만 아니라 가장 기본이 되는 좌측 정렬이 아닌 우측 정렬을 해야되기 때문이다..

문제
첫째 줄에는 별 1개, 둘째 줄에는 별 2개, N번째 줄에는 별 N개를 찍는 문제

하지만, 오른쪽을 기준으로 정렬한 별 (예제 참고)을 출력하시오.

입력
첫째 줄에 N (1<=N<=100)이 주어진다.

출력
첫째 줄부터 N번째 줄 까지 차례대로 별을 출력한다.

 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
package Code_201608;

import java.util.Scanner;

public class PrintForStarTwo {

    @SuppressWarnings("resource")
    public static void main(String[] args) {
        // TODO Auto-generated method stub
  
        Scanner scan = new Scanner(System.in);
  
        //int a = 5;
        int a = scan.nextInt();
  
        for(int i = 1; i <= a; i++) { //세로
   
            for(int j = 1; j <= a - i; j++) { //가로, 공백을 우선 출력
                System.out.print(" "); //줄바꿈이 아니므로 공백을 출력
                //System.out.print("@");
            }
            for(int k = i; k > 0; k--) { //가로, 공백 제외한 공간을 * 로 출력
                System.out.print("*");
            }
            System.out.println("");
        }
    }

}//





결과를 보면 한 번 틀렸는데 처음 제출할 때 20 라인 주석으로 된 부분을 보면, 테스트를 위해서 @ 표시를 한 상태로 제출을 해서 오답이었다.. ㅎㅎㅎ.. 공백을 표시했어야 되는데 말이지.. ~_~..


우선 이문제는 접근을 어떻게 하느냐가 제일 중요한듯하다.. 좌측이 아닌 우측 정렬을 하려면 좌측에 공백을 줘야된다.. 그러려면 어떻게..?? 핵심적으로는 for 를 두 개를 써야되며, 크게는 세개를 써야된다.. 전체적인 for 하나, 공백 출력 for 하나, 실제 별 출력 for 하나 이렇게 말이다..

무엇보다 공백을 단순히 머리로 생각하지말고, 나처럼 @ 이나 기타 문자를 통해서 화면 좌측부분을 출력한 후 우측을 천천히 고민해보는것이 좋다고 생각한다.. 머리가 좋은 사람은 상관없겠지만, 나 같은 경우에는 눈에 보이지 않는 상태에서 코딩하는게 젤 어렵다.. ㅋㅋㅋ..

단순한 문제임에도 for 이다보니 조건 생각하는 곳에서 시간을 꽤나 잡아먹은 문제다.. 나중에 더 어려운 문제는 어뜨카지.. ㅠㅜ.. 다른 분들은 쉽게 쉽게 잘 해결하시리라 믿으며..

[JAVA] Baekjoon 첫째 줄에는 별 1개, 둘째 줄에는 별 2개, N번째 줄에는 별 N개 출력해 봅니다..

계속해서 for 에 대한 문제들이다.. 그래도 별출력 문제가 끝나고나면, 또 다른 것들이 기다리고 있으니 더욱 힘내보자규..

문제
첫째 줄에는 별 1개, 둘째 줄에는 별 2개, N번째 줄에는 별 N개를 찍는 문제

입력
첫째 줄에 N (1<=N<=100)이 주어진다.

출력
첫째 줄부터 N번째 줄 까지 차례대로 별을 출력한다.

for 이긴 하지만 이번 문제는 별출력 문제중에도 가장 초급 문제라고 할 수 있다.. for 돌면서 증가만 시키면서 라인에 출력만 하면 되기 때문이다..

 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
package Code_201608;

import java.util.Scanner;

public class PrintForStarOne {

    @SuppressWarnings("resource")
    public static void main(String[] args) {
        // TODO Auto-generated method stub
  
        Scanner scan = new Scanner(System.in);
  
        //int a = 5;
        int a = scan.nextInt();
  
        for(int i = 1; i <= a; i++) { //세로
   
            for(int j = 1; j <= i; j++) { //가로, i 를 a 로 하면 5개씩 출력
                System.out.print("*");
                //System.out.println("*"); //줄바꿔서 세로로 출력
            }
            System.out.println("");
        }
    }

}//




2016년 8월 18일 목요일

[JAVA] Baekjoon 구구단을 출력해봅니다..

추억의 구구단 문제다.. 과거 대학교 시절 언어 수업 첫 과제가 구구단 짜기였는데.. 물론!!! 못맞췄다 ㅡㅡ.. 그 때는 언어를 내가 왜 해야되는지 몰랐기 때문에.. 지금보다 심각했다고 볼 수 있다.. 그런데 해당 문제는 약간 패턴이 틀린데 하나의 구구단 패턴만 표출하면 되는 것이라서 쉽다.. 아마도 초보 등급이어서 그런게 아닐까 싶다..

문제
N을 입력받은 뒤, 구구단 N단을 출력하는 프로그램을 작성하시오. 출력 형식에 맞춰서 출력하면 된다.

입력
첫째 줄에 N이 주어진다. N은 1보다 크거나 같고, 9보다 작거나 같다.

출력
출력형식과 같게 N*1부터 N*9까지 출력한다.

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

import java.util.Scanner;

public class PrintForGuGuDan {

    @SuppressWarnings("resource")
    public static void main(String[] args) {
        // TODO Auto-generated method stub
  
        Scanner scan = new Scanner(System.in);
  
        //int a = 2;
        int a = scan.nextInt();
  
        for(int i = 1; i <= 9; i++) {
            System.out.println(a + " * " + i + " = " + a * i);
        }
    }

}//





내가 보기에 문제가 어렵지는 않지만, 내가 풀다보니 주의할점이 있다.. 과거에 구구단을 다출력하는 것을 생각하다보니 괜히 어렵게 생각을 했는데 출력에 대한 문구를 가만.. 보고 있으니 내가 오해를 한것이다.. 하나의 패턴을 출력하면 되는 것인데 괜시리.. 역시 이런 코딩 테스트는 간단함을 떠나서 문제의 의도를 잘 파악하고 출력하고자 하는 패턴을 잘 확인해야되는 것 같다..

[JAVA] Baekjoon N부터 1까지 숫자를 한 줄에 하나씩 출력해봅니다..

이번 문제는 앞선 문제와 정반대의 개념이다.. 순차적으로 숫자를 늘리는 것이 아니라 줄여가는 것이다.. 근데 꼭.. 난 이러한 역으로 하는 문제를 어려워한다.. 머리가 반대롤 도는걸 용납을 안하는건지.. ㅡ;;ㅡ..

이번에도 for 문 딱 작성하고서 그 안에 들어갈 코딩을 좀 생각을 했다.. 사고방식이 좀 유연해야되는데 너무 굳어진 느낌이 있다.. 이러한 연습을 통해서 좀 사라졌으면 한다..

문제
자연수 N이 주어졌을 때, N부터 1까지 한 줄에 하나씩 출력하는 프로그램을 작성하시오.

입력
첫째 줄에 100,000보다 작거나 같은 자연수 N이 주어진다.

출력
첫째 줄부터 N번째 줄 까지 차례대로 출력한다.

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

import java.util.Scanner;

public class PrintForNTo1 {

    @SuppressWarnings("resource")
    public static void main(String[] args) {
        // TODO Auto-generated method stub
  
        Scanner scan = new Scanner(System.in);
  
        //int a = 5;
        int a = scan.nextInt();
  
        for(int i = a; i >= 1; i--) {
            System.out.println(i);
        }
    }

}//




[JAVA] Baekjoon 자연수 N이 주어졌을 때, 1부터 N까지 한 줄에 하나씩 출력하는 프로그램을 작성하시오..

드디어 그 앞에 과정, 입/출력 받아보기, 사칙연산 도전하기가 다 끝이 나고 이제부터는 for 문 사용하기로 들어간다.. 개발하면서 제일 어려운 것이 for 문이나 List, Array 등인데 난이도 하부터 올라가니까 차근 차근 잘해봐야겠다..

문제
자연수 N이 주어졌을 때, 1부터 N까지 한 줄에 하나씩 출력하는 프로그램을 작성하시오.

입력
첫째 줄에 100,000보다 작거나 같은 자연수 N이 주어진다.

출력
첫째 줄부터 N번째 줄 까지 차례대로 출력한다.

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

import java.util.Scanner;

public class PrintFor1ToN {

    @SuppressWarnings("resource")
    public static void main(String[] args) {
        // TODO Auto-generated method stub
  
        Scanner scan = new Scanner(System.in);
  
        //int a = 5;
        int a = scan.nextInt();
  
        for(int i = 1; i <= a; i++) {
            System.out.println(i);
        }
    }

}//





문제를 보면 알겠지만 어려운 문제는 아니다.. 내가 아무리 for 문을 어려워한다지만.. 이정도는 풀어야겠지..?? 순차적으로 늘려나가는 패턴이다..