본문 바로가기

건승하고있어요/알고리즘

[for] 열 개씩 끊어 출력하기

반응형

문제: 알파벳 소문자와 대문자로만 이루어진 길이가 N인 단어가 주어진다.

한 줄에 10글자씩 끊어서 출력하는 프로그램을 작성하시오.

(출처: https://www.acmicpc.net/problem/11721)


아.. 눈물날거 같다.

1) 드디어 풀어서

2) 그렇게 우여곡절 끝에 풀었는데 바보멍청이같이 풀어서


왜 나는 다른 길은 생각해 보려고 하지 않았을까 도대체 왜..

이 엄청 쉬운 문제를 돌고 돌아서 풀어야만 했을까. 참으로 반성하게 된다ㅠ_ㅠ


어쨌든, 내가 어떻게 풀었는지를 기록해 두는 것도 나쁘지 않을 것 같으니 그냥 반성하는 의미에서 남겨두자. ㅠ0ㅠ


나는 이 문제를 봤을 때 substring을 써야겠다고 생각했다. 여기가 바로 재앙의 시작이었다.

문장을 받아서 글자를 10개씩 끊어서 출력하면 되겠지 하고  생각한거.


substring은 끊을 첫 인덱스와 마지막 인덱스가 필요하다. 그래서 변수로 미리 startIndex와 endIndex를 선언했다.

그리고 포문이 한 번 돌 때마다 그 인덱스들에 10을 더해줬다. 마지막에는 10을 더하면 out of index 오류가 나니 더해주지 않았다.


 if (i != (M - 1)) {
                startIndex += 10;
                endIndex += 10;

            } else if (N.length() % 10 != 0 && i == (M - 2)) {
                startIndex += 10;
            }


가장 문제는 바로 10의 배수가 아닌 수가 들어 왔을 때였다. 이것 때문에 내가 진짜-ㅠ- 바보같은 짓을 엄청나게 했는데...

방도 치우고 뻘짓을 다하면서 머리를 식히면서 어떻게 해야 할까 엄청 고민했는데 ㅠ_ㅠ


 if (N.length() % 10 == 0) {
            M = N.length() / 10;
        } else if (N.length() % 10 != 0) {
            M = (N.length() / 10+ 1;
        }


M은 포문을 몇 번 돌릴지를 결정하는 변수다. 10의 배수면 글자를 10으로 나눈 수만큼만 돌리면 되지만, 10의 배수가 아닌 경우 10으로 나눈 나머지를 출력하기 위해 한 번 더 돌려줘야 하기 때문이다. 그래서 if문으로 M을 정해줬다.


그리고나서 글자를 출력하기 위한 for문을 돌린다.

가장 문제였던 부분은 10의 배수만큼을 돌고 나서 나머지가 몇개가 남았는지 무슨수로 알지... 였다. 음... 

substring은 startIndex와 endIndex를 반드시 명시해주어야 하고... 근데 나는 이게 몇글자가 남았는지 알 수가 없고..

그래서 처음에는 for문을 돌려서 배열에 넣어서 배열로 찍어 줄까 하고 생각했는데, 그렇게 배열을 선언하려니 또 몇개가 남았는지 알 수가 없어서 배열을 미리 선언 해 둘 수가 없는거 ㅠ_ㅠ 그래서 에힝 어째야 할까 하고 생각하다가 이렇게 작성하기까지 이르렀다. 


if (N.length() % 10 != 0 && i == (M - 1)) {
                int R = N.length() - startIndex;
                int shortEnd = startIndex + R;
                voca = N.substring(startIndex, shortEnd);
                System.out.println(voca);
            } else {
                voca = N.substring(startIndex, endIndex);
                System.out.println(voca);
            }


우선 마지막 숫자를 알기 위해서 이 문장의 길이에서 여태까지 10씩 더해준 startIndex를 빼주는거.

그러면 나머지 글자가 몇 개인지 알 수 있으니까ㅠ_ㅠ 그래서 따로 R이라는 변수에 저장주고 그 수를 endIndex로 해서 잘라줬다.

아! 아!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

겨우 이거 생각해내느라 아주 멍청이 방청이짓을 했다. 

if문마다 계속 경우 넣어주고 으아으아으아으아으아으아

진짜 쇼를 해서 나온 결과


흑흑흑

흑흑흑흑흑 

눈물이 다 날거 같다ㅠㅠ 흑흑흑 으흑흑


근데 제출하고 났더니 남들보다 코드가 두배는 더 긴거.

도대체 왜지. 남들은 어떻게 한거지.

했는데... 아...

아아아아아아아아아아아아아아아아아아


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import java.util.Scanner;
 
public class Main{
    public static void main(String[] args){
        Scanner scan = new Scanner(System.in);
        String input = scan.next();
        scan.close();
        
        for(int i=0 ; i<input.length() ; i++){
            System.out.print(input.charAt(i));
            if(i%10 == 9){
                System.out.println();
            }
        }
    }
}
cs


글자단위인 charAt(i)으로 그냥 글자 열개씩 찍어줬다.

...

ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ

아 진짜

크크크크크크크크킄

크크크크크크크크킄크크크크크크크크크크크크


고생은 어리면 어릴수록 어릴 때 하는게 좋고

빠르게 가는 것 보다는 정확한 길로 가는게 가장 시간을 절약하는 방법이고

첫 단추를 바르게 집어 넣는 것이 고생도 안하고 가장 정확한 길로 가는 시작이라는 것.

저어어어어어어엉말 중요하다는 거 다시 한 번 깨닫습니다.


그래도 세시 반 이전엔 자자고 결심했었는데

안 넘겨서 그나마 다행.

눈물난다.

안습이다.

으항으아하하앙....


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
47
48
49
50
51
52
import java.util.Scanner;
 
public class Voca10 {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
 
        String N = scan.nextLine();
        boolean YN = true;
        while(YN) {
            if(N.length()>0 && N.length()<100) {
                YN = false;
            } else {
                N = scan.nextLine();
            }
        }
        String voca;
        int startIndex = 0;
        int endIndex = 9;
        int M = 0;
 
        if (N.length() % 10 == 0) {
            M = N.length() / 10;
        } else if (N.length() % 10 != 0) {
            M = (N.length() / 10+ 1;
        }
        for (int i = 0; i < M; i++) {
 
            if (N.length() % 10 != 0 && i == (M - 1)) {
                int R = N.length() - startIndex;
                int shortEnd = startIndex + R;
                voca = N.substring(startIndex, shortEnd);
                System.out.println(voca);
            } else {
                voca = N.substring(startIndex, endIndex);
                System.out.println(voca);
            }
 
            if (i != (M - 1)) {
                startIndex += 10;
                endIndex += 10;
            } else if (i == (M - 1)) {
                
            } else if (N.length() % 10 != 0 && i == (M - 2)) {
                startIndex += 10;
            }
        }
 
        scan.close();
    }
 
}
 
cs


반응형

'건승하고있어요 > 알고리즘' 카테고리의 다른 글

[if] 평균구하기  (2) 2018.02.06
[queue] 큐 기본문제와 상속  (8) 2018.02.06
[stack] 스택 기본문제  (2) 2018.02.04
[문자열사용] 아스키코드  (0) 2018.02.01
[이항계수] 팩토리얼  (0) 2018.02.01