[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년 9월 6일 화요일

[JAVA] Baekjoon 각 자리수가 등차수열을 이루는 지 판별하는 함수를 구현해 문제를 해결해봅니다..

문제
어떤 양의 정수 X의 자리수가 등차수열을 이룬다면, 그 수를 한수라고 한다. 등차수열은 연속된 두 개의 수의 차이가 일정한 수열을 말한다. N이 주어졌을 때, 1보다 크거나 같고, N보다 작거나 같은 한수의 개수를 출력하는 프로그램을 작성하시오. 

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

출력
첫째 줄에 1보다 크거나 같고, N보다 작거나 같은 한수의 개수를 출력한다.

이번에는 등차수열이란다.. 아흠.. 등차수열 너무 오래전 얘기라 먼소린지도 모르겠고, 우선 개념부터 잡아야지 하면서 검색하고 있었다.. 그런데 역시나 내 스탈상 정의만 봐서는 이해가 안가고.. 혹시 누군가 부연 설명을 좀 해주지 않았을까 하는 마음에 더 검색을 해봤다..

그런데 역시나 위대한 분들은 세상에 너무 많으시더란 말이지.. occidere 님의 블로그를 가보니 해당 알고리즘에 대한 문제 풀이와 실질적으로 필요한 내용들에 대해서 정리를 잘 해주셨다.. 그래서 문제를 보면서 이해를 할 수 있었다.. 다만, 단번에 이해가 안가서 여러번 읽어봤다능.. ㅠㅜ

 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
36
37
38
39
40
package step5;

import java.util.Scanner;

public class FuncHanSu {

    @SuppressWarnings("resource")
    public static void main(String[] args) {

        Scanner scan = new Scanner(System.in);
        
        //int valA = 110;
        int valA = scan.nextInt();
        int valK = 0;
        int valHan = 0;
        int varArr[] = new int[3];
  
        for(int i = 1; i <= valA; i++) {
            if(0 < i && i < 100) {
                valHan = i;
            
            } else if(i == 1000) {
                break;
           
            } else {
                valK = 0;
                int valT = i;
                while(valT > 0) {
                    varArr[valK] = valT % 10;
                    valT /= 10; valK++;
                }
                if(varArr[0] - varArr[1] == varArr[1] - varArr[2]) {
                    valHan++;
                }
            }
        }
        System.out.println(valHan);
    }

}//





[JAVA] Baekjoon 자연수 n에 대해 d(n)의 값을 구하는 함수를 정의해 문제를 해결해봅니다..

오랫만에 코딩 테스트를 올려본다.. 이제 곧 있음 명절인데 모두 즐거운 명절을 맞이 하시길 바라며..

문제
셀프 넘버는 1949년 인도 수학자 D.R. Kaprekar가 이름 붙였다. 양의 정수 n에 대해서 d(n)을 n과 n의 각 자리수를 더하는 함수라고 정의하자. 예를 들어, d(75) = 75+7+5 = 87이다.

양의 정수 n이 주어졌을 때, 이 수를 시작해서 n, d(n), d(d(n)), d(d(d(n))), ...과 같은 무한 수열을 만들 수 있다. 

예를 들어, 33으로 시작한다면 다음 수는 33 + 3 + 3 = 39이고, 그 다음 수는 39 + 3 + 9 = 51, 다음 수는 51 + 5 + 1 = 57이다. 이런식으로 다음과 같은 수열을 만들 수 있다.

33, 39, 51, 57, 69, 84, 96, 111, 114, 120, 123, 129, 141, ...

n을 d(n)의 생성자라고 한다. 위의 수열에서 33은 39의 생성자이고, 39는 51의 생성자, 51은 57의 생성자이다. 생성자가 한 개보다 많은 경우도 있다. 예를 들어, 101은 생성자가 2개(91과 100) 있다. 

생성자가 없는 숫자를 셀프 넘버라고 한다. 100보다 작은 셀프 넘버는 총 13개가 있다. 1, 3, 5, 7, 9, 20, 31, 42, 53, 64, 75, 86, 97

10000보다 작거나 같은 셀프 넘버를 한 줄에 하나씩 출력하는 프로그램을 작성하시오.

입력
입력은 없다

출력
10,000보다 작거나 같은 셀프 넘버를 한 줄에 하나씩 증가하는 순서로 출력한다.

해당 문제는 나 스스로 풀진 못했다.. 다른 분이 하신 것을 보면서 문제의 의도와 풀어나가는 과정을 익혔다.. 그런데 아마도 이제 그런 문제가 더 많아질 것으로 보인다.. 아쉽기는 하지만 나 스스로 생각하는 과정 등을 더 발전해보고자 시작했기에 그런 측면에서는 만족한다..

이 문제는 다른 부분 보다는 셀프넘버에 대한 개념과 이해가 가장 중요하다고 생각 된다.. 나두 처음 문제를 접했을 때 문제를 푸는게 문제가 아니라 셀프넘버 자체를 이해를 못하고 있다보니 다른분들이 풀어둔 문제를 봐도 소스 자체가 이해가 안갔다..

정의를 찾다보니 영문으로 된 글도 있었다.. 영문이어서 번역기 돌려서 봤는데 그래도 어느정도의 개념은 문제들과 더블어 이해하다보면 납득?? 은 가더란.. ㅎㅎ



 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
36
37
38
39
40
41
42
43
44
45
46
package step5;

//import java.util.Scanner;

public class FuncNum {

    //@SuppressWarnings("resource")
    public static void main(String[] args) {
  
        //Scanner scan = new Scanner(System.in);
        
        int valA = 0;
        int valB = 0;
        int valC = 0;
        int valD = 0;
        int valResult = 0;
  
        boolean[] generator = new boolean[10000];
        
        for(int i = 1; i < 10000; i++) {
            valA = i / 1000;
            valB = (i / 100) % 10;
            valC = (i / 10) % 10;
            valD = i % 10;
            
            //System.out.println("valA ######## > " + valA);
            //System.out.println("valB ######## > " + valB);
            //System.out.println("valC ######## > " + valC);
            //System.out.println("valD ######## > " + valD);
            //System.out.println("================================");
            
            valResult = valA + valB + valC + valD + i;
         
            if((valResult >= 1) && (valResult < 10000)) {
                generator[valResult] = true;
            }
        }
        
        for(int i = 1; i < 10000; i++) {
            if(generator[i] == false) {
                System.out.println(i);
            }
        }
    }

}//



2016년 9월 1일 목요일

[JAVA] Baekjoon 정수 N개 중에서 X보다 작은 수 모두 출력해보기..

벌써 9월이구나.. 시간 참 빠르다.. 오늘은 if else 의 마지막 문제다.. 풀어놓기는 좀 됬는데 업무로 인해서 조금 늦게 올리게 되었다..

문제
정수 N개로 이루어진 수열 A와 정수 X가 주어진다. 이 때, A에서 X보다 작은 수를 모두 출력하는 프로그램을 작성하시오.

입력
첫째 줄에 N과 X가 주어진다. (1 ≤ N, X ≤ 10,000)

둘째 줄에 수열 A를 이루는 정수 N개가 주어진다. 주어지는 정수는 모두 1보다 크거나 같고, 10,000보다 작거나 같은 정수이다.

출력
X보다 작은 수를 입력받은 순서대로 공백으로 구분해 출력한다. X보다 작은 수는 적어도 하나 존재한다.

해당 문제도 역시나 생각을 어떻게 하느냐가 가장 중요하지 싶다..

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

import java.util.Scanner;

public class PrintIfSmaller {

    @SuppressWarnings("resource")
    public static void main(String[] args) {
  
        Scanner scan = new Scanner(System.in);
        
        //int numArr = 10;
        //int numVal = 5;
        
        int numArr = scan.nextInt();
        int numVal = scan.nextInt();
  
        int numArray[] = new int[numArr];
        for(int i = 0; i < numArray.length; i++) {
            numArray[i] = scan.nextInt();
        }
        //String[] numArray1 = {"1", "10", "4", "9", "2", "3", "8", "5", "7", "6"};
        for(int J = 0; J < numArray.length; J++) {
            if(numArray[J] < numVal) {
                System.out.print(numArray[J] + " ");
            }
        }
    }

}//








18 라인에서는 배열의 방을 만들어준다.. 그 배열의 방만큼 for 돌면서 유입되어지는 수로 채워주게 된다.. 나는 테스트를 위해서 22 라인에 String 으로 배열을 임의로 만들었다..

무튼 유입이 된 수를 통해서 배열이 생성되고 나면, 그 배열만큼 for 를 돌려서 또 다른 비교 수와 비교를 하면 되는데 문제에서는 X 가 이에 해당한다.. 문제에서 X 보다 작은수라고 하였으니 조건 또한 24 라인처럼 if(numArray[J] < numVal)으로 되며, 그 조건에 해당할 때 해당하난 배열 값 numArray[J] 에 공백을 더해주면 되겠다.. 

그렇게 하면 문제에서 원하는 출력값이 나오게 되는데 조금 더 생각해보자면 마지막 수에는 뒷 공백이 없는게 맞다고 생각한다.. 물론 저렇게 해도 문제는 맞게 되긴 하지만 ㅎㅎㅎ..

아 참!!! 글구 답안지를 보면 상당히 많이 틀렸는데 문제 이해를 못해서 나오게 된 참담한 과정이라고 할 수 있다.. 다른 분들은 부디 문제를 잘 이해하셔서 나와 같은 오답 라인이 없길 바란다.. ㅎㅎㅎ

2016년 8월 25일 목요일

[JAVA] Baekjoon 세 정수 A, B, C중에 두 번째로 큰 정수 찾아보기..

이제는 if 조건이 3가지로 늘어났다.. 머 그렇다고 상황이 크게 바뀌는 것은 없다.. 만약 문제가 for 를 기초로 한다면 이런말을 못했을 나지만.. ㅋㅋㅋ.. if 라 조금 배짱을 부려본다.. ㅎㅎ

문제
세 정수 A, B, C가 주어진다. 이 때, 두 번째로 큰 정수를 출력하는 프로그램을 작성하시오. 

입력
첫째 줄에 세 정수 A, B, C가 공백으로 구분되어 주어진다. (1 ≤ A, B, C ≤ 100)

출력
두 번째로 큰 정수를 출력한다.

 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
36
37
38
39
40
41
42
43
package step4;

import java.util.Scanner;

public class PrintIfInteger {

    @SuppressWarnings("resource")
    public static void main(String[] args) {
  
        Scanner scan = new Scanner(System.in);
        
        //int intValA = 20;
        //int intValB = 10;
        //int intValC = 10;

        int intValA = scan.nextInt();
        int intValB = scan.nextInt();
        int intValC = scan.nextInt();
        
        //명확히 구분 될 때
        if(((intValA > intValB && intValA < intValC) || (intValA > intValC && intValA < intValB)) && (intValB != intValC)) {
            System.out.println(intValA);
         
        } else if(((intValB > intValA && intValB < intValC) || (intValB > intValC && intValB < intValA)) && (intValA != intValC)) {
            System.out.println(intValB);
         
        } else if(((intValC > intValA && intValC < intValB) || (intValC > intValB && intValC < intValA)) && (intValA != intValB) ) {
            System.out.println(intValC);
         
        //두 수가 같을 때
        } else if((intValA == intValB) || (intValA == intValC)) {
            System.out.println(intValA);
         
        } else if((intValB == intValC)) {
            System.out.println(intValB);
         
        //세 수가 같을 때
        } else if((intValA == intValB) && (intValA == intValC) && (intValB == intValC)) {
            System.out.println(intValA);
        }
    }

}//



문제에 대한 답은 상당히 다양할 것이다.. 우선 나는 각 3개의 입력값을 설정한 상태에서 if 를 충실히 사용했다.. 각각에 대한 경우에 대한 비교를 한 패턴이기 때문에 소스가 어찌보면 지저분하다.. ㅎㅎ

하지만 모든 분들이 알듯이 소스에 대한 코딩에 대한 답은 없으므로 자신의 입맛에 맞게 혹은 자신이 실험하고픈 방향대로 해보면 좋을 듯 하다.. 세상에 모든 소스는 내가 발전하기 위한 참고용이지.. 정답은 아니니 말이다..

2016년 8월 24일 수요일

[JAVA] Baekjoon 시험 점수를 입력받고 성적 출력해보기..

이제부터는 if else 에 대한 문제들이다.. 근데 생각보다 if 파트에는 많인 문제가 할당되진 않았었다.. 그래도 앞선 for 보다는 조금 더 적응이 된다고 해야되나.. 그런 문법이어서 자신감을 갖고 시작해보련다.. 막상 들어가면 어떻게 될지는 모르겠지만 말이지.. ㅋㅋ..

문제
시험 점수를 입력받아 90 ~ 100점은 A, 80 ~ 89점은 B, 70 ~ 79점은 C, 60 ~ 69점은 D, 나머지 점수는 F를 출력하는 프로그램을 작성하시오.

입력
첫째 줄에 시험 점수가 주어진다. 시험 점수는 0보다 크거나 같고, 100보다 작거나 같은 자연수이다.

출력
시험 성적을 출력한다.

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

import java.util.Scanner;

public class PrintIfScore {

    @SuppressWarnings("resource")
    public static void main(String[] args) {
  
        Scanner scan = new Scanner(System.in);
        
        //int scoreVal = 100;
        int scoreVal = scan.nextInt();
  
        //90 ~ 100점은 A, 80 ~ 89점은 B, 70 ~ 79점은 C, 60 ~ 69점은 D, 나머지 점수는 F
        String scoreRank = "F";
        if(90 <= scoreVal && scoreVal <= 100) {
            scoreRank = "A";
         
        } else if(80 <= scoreVal && scoreVal < 90) {
            scoreRank = "B";
         
        } else if(70 <= scoreVal && scoreVal < 80){
            scoreRank = "C";
         
        } else if(60 <= scoreVal && scoreVal < 70) {
            scoreRank = "D";
        }
        System.out.println(scoreRank);
    }

}//






음.. 문제 자체가 어렵다고 보진 않는다.. 다만 해당 문제는 로직을 이해하고 문제를 풀어가는 스킬보다 국어에 대한 부분이 더 중요하다고 본다.. 왜냐면 우리나라 말은 몇 점 미만, 이하, 이상 등등 어떻게 생각하느냐에 따라서 기준이 되는 점수가 포함 되기도 하고 안되기도 하기 때문이다..

그런 관점에서 해당 문제에서는 점수의 등급 구간에 대한 부분을 잘 생각하면서 풀면 손쉽게 풀수 있으리라 생각한다..

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

}//





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