IT/개발 기록

[백준 알고리즘] 11718 그대로 출력하기 (JAVA)

JJo 2019. 1. 9. 10:55

 

문제


입력 받은 대로 출력하는 프로그램을 작성하시오.

 

1. 입력이 주어진다. 

2. 입력은 최대 100줄로 이루어짐

3. 알파벳 소문자, 대문자, 공백, 숫자로만 이루어져 있음

4. 각 줄은 100글자를 넘지 않음

5. 빈 줄은 주어지지 않음

6. 각 줄은 공백으로 시작하지 않고, 공백으로 끝나지 않음

 

 

 

코드 1


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import java.util.ArrayList;
import java.util.Scanner;
public class Main{
    public static void main(String args[]){
        Scanner sc = new Scanner(System.in);
        String a;
        ArrayList<String> array = new ArrayList<>();
 
        for(int i = 0; i<100; i++) {
            a = sc.nextLine();
            if(a.length()>100 || a.startsWith(" "|| a.endsWith(" "|| a.equals("")) {
                i = i-1;
            }else {
                array.add(a);
            }
        }
        for(int i=0 ; i<array.size(); i++) {
            System.out.println(array.get(i));
        }
    }
}
cs

 

1. 입력이 주어진다. 

2. 입력은 최대 100줄로 이루어짐

3. 알파벳 소문자, 대문자, 공백, 숫자로만 이루어져 있음

4. 각 줄은 100글자를 넘지 않음

5. 빈 줄은 주어지지 않음

6. 각 줄은 공백으로 시작하지 않고, 공백으로 끝나지 않음

 

첫번째 풀이에서 2,3번이 문제가 되었다.

최대100줄로 이루어진것을 무조건 100줄까지 입력되게 코딩을 하였고

알파벳 소문자,대문자,공백,숫자로만 이루어져있다는걸 아예 간과했다.

작은 조건들도 놓치면 안되는데..

문제를 위 처럼 정리하지 않고 바로 풀어 생긴 문제 같다

고객의 요구사항을 분석할때도 요청사항을 명확히 정리하고 개발을 들어가야하는데

왜 이런 실수를 한건지.. 

 

 

 

코드 2


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
import java.util.ArrayList;
import java.util.Scanner;
public class Main{
    public static void main(String args[]){
        Scanner sc = new Scanner(System.in);
        String a;
        ArrayList<String> array = new ArrayList<>();
 
        for(int i = 0; i<100; i++) {
            a = sc.nextLine();
 
            if((a.length()>=100)|| a.startsWith(" "|| a.endsWith(" ") ) {
                i = i-1;
                System.out.println("다시 입력해주세요.");
            }else if(a.equals("")){
                i = 100;
            }else {
                array.add(a);
            }
        }
        for(int i=0 ; i<array.size(); i++) {
            System.out.println(array.get(i));
        }
    }
}
cs

 

1. 입력이 주어진다. 

2. 입력은 최대 100줄로 이루어짐

3. 알파벳 소문자, 대문자, 공백, 숫자로만 이루어져 있음

4. 각 줄은 100글자를 넘지 않음

5. 빈 줄은 주어지지 않음

6. 각 줄은 공백으로 시작하지 않고, 공백으로 끝나지 않음

 

 

2번의 문제를 더이상 입력하지 않고 

출력하겠다라는 걸 공백값이 입력되면 끝내겠다고 가정했다.(문제에는 이런내용까진 없어보이는데..)

그리고 아래 코드처럼 영문자,숫자만 입력할 수 있는 함수를 만들어 3번의 조건을 만족시키면 될 것같다

(문제 자체에서 이것까지 확인하지는 않는것 같음..)

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public boolean Inputcheck(String textInput) {
 
    char chrInput = "";
 
    for (int i = 0; i < textInput.length(); i++) {
 
        chr = textInput.charAt(i); 
 
        if (chrInput >= 0x61 && chrInput <= 0x7A) {
            //소문자
        } 
        else if (chrInput >=0x41 && chrInput <= 0x5A) {
            //대문자
        }
        else if (chrInput >= 0x30 && chrInput <= 0x39) {
            //숫자
        } 
        else {
            return false//영문자,숫자 아닌경우
        }
    }
    return true;
}
cs

 

 

 

생각해 볼 부분

 

 

 

 


문제해결능력을 증진하려고 알고리즘 문제를 

 

다시 공부하게 되었는데, 기초적인 문법에서 바로 생각이 나지 않았고

 

문제에서 준 힌트를 놓치는 부분이 있었다.

 

흔히, 시험볼 때 이건 쉽다라고 생각하고 대충 보고 넘어가는느낌처럼..

 

시간이 날 때마다 알고리즘 문제를 풀것인데

문제의 요점, 힌트를 정확히 파악해서 정리하고

기초적인 문법쪽에서 문제가 있다면 공부하면서 풀도록 해야겠다