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

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

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년 4월 28일 목요일

[Talk] 아흐 if else 잘 쓰자..

오늘은 개발건에 대한 반영이 있었다.. 그런데 반영이 되고서 문제가 좀 있었다.. 업무 자체는 되었지만, 로직에 대한 오류[실질적인 오류라기보단 위험도가 내재되어 있는 코딩] 때문이었는데 그 맹점은 if 문과 if else 문이었다..

웹 개발을 하면서 항상 쓰던 구문이고, 어찌보면 모든 로직의 기본이 된다고 볼 수 있는 문법이다.. 그런데 개발할 때는 왜 그게 안보였을까.. if 문이 여러번 존재하면, 한번씩 다 실행을 하지만, if else 로 하게 되면 A 또는 B 로 빠져서 어느 한쪽만 실행을 하게 된다..

구태여 불필요한 로직이 실행이 안된다는 것인데 또 항상 그렇게 써왔는데 바쁘게 해서 그런건지 아니면, 거의 퇴근 할 때 개발을 해서 정신 못차리고 했던건지..

if 문을 버젓하게도 4개를 연타로 써놨다.. 쓸데 없는 로직이 항상 돌게 된다.. 그런데 그 부분에 대한 것을 알아차리지 못하고 넘어간 것이다.. 헌데 오늘 현업하고 통화하면서 보니 그 부분이 딱!!! 눈에 들어오는것 아닌가 순간 멘붕이 오면서 머리가 멍해졌다.. 당연히 현업도 왜 이렇게 개발했냐고 다그치는데 이건 머 완전 대역 죄인이 따로 없다..

그 순간 모든 로직이 그냥 안보이는 상태가 되버려서 순간 빨리 작업을 해야되는데 하지를 못했다.. 내가 진정이 안되는 지경이니 서둘러서 주변에 계신 과장님께 잠시 같이 봐달라고 해서 같이 보면서 마음의 진정을 한 후에야 코딩을 했다.. 시간적으로는 많아야 5분 남짓인데 체감으로는 1시간 이상이 흐르는 듯 했다.. 하아 미춰버린다..

일전에도 나 스스로 조금 더 신경쓰고 하자고 글을 올렸는데 한동안 잠잠하다가 큰 실수를 하게 된것이다.. 조심하자 그러지말자.. 한 번 더 생각하고 약간의 생각만 더 하면 되는 것을 왜 그러지 못해서 진짜 복잡한 로직의 문제가 아닌 신입이나 할 법한 초보적인 실수를 하느냔 말이다..

내가 항상 조심하려고 하는 것중에 하나가 어찌보면 내 나쁜 버릇일지도 모르겠다.. 한 소스에 A, B ,C ,D 가 있다고 할 때 B 를 수정해달라고 하면, 4가지를 전체적으로 보면서 B 를 수정하는 것이 아니라 B 에만 집중해서 그것만 수정을 하면서 끝나버린다..

그러다보니 다시금 테스트를 하거나 전체적인 프로세스를 수행하면 B 수정으로 인해서 A, C, D 세 개와 상관관계가 틀어져서 오류가 발생하는 것을 종종 보게 된다.. [어찌 보면 당연한 오류일수도 있겠다.. 내가 자초한 것이니..]

앞으로 개발할 때는 너무 한 곳에 치우치는 것이 아닌 전체적으로 보도록 노력을 하자.. 아무리 소소한 것이라도 그렇게 해보자.. 안그러면 벌써 년차도 오래 됬는데 더 나쁜 습관으로 남게 될것이다..

특히나 로직을 들어가기에 앞서서 null 체크, length 체크, size 체크 등등 사전에 변수들로 인해서 문제가 생길법한 것들은 검증하는 부분을 꼭 필수로 넣어야 겠다..

하이고 미치겠다.. 실수를 할 수는 있지만, 할 법한 실수를 하자.. 그리고 다시금 누차 항상 말하는 것이고 나 스스로에게 요청하는 것이지만 마음의 여류를 갖고 업무를 하자..

오늘 조금 늦게 가고, 내 개인 일정을 조금 못하는게 좋지.. 누적된 실수로 형편없는 사람이 되거나 그 실수로 인해서 시스템 자체에 큰 누가 되는것이 더 문제 아니냔 말이다..

힘내자.. 나 스스로 알고 있고, 깨닫는 만큼 잘하자..