본문 바로가기

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

[문자열사용하기] 알파벳찾기 / break문

반응형

문제: 알파벳 소문자로만 이루어진 단어 S가 주어진다. 각각의 알파벳에 대해서, 단어에 포함되어 있는 경우에는 처음 등장하는 위치를, 포함되어 있지 않은 경우에는 -1을 출력하는 프로그램을 작성하시오.

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


그냥 보자마자 후다닥 코드를 짰다.


 String S = scan.nextLine();
        char A [] = S.toCharArray();
        char B [] = {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};
        int idx = -1;
        for(int i=0 ; i<B.length ; i++) {
            for(int j=0 ; j<S.length() ; j++) {
                if(A[j] == B[i]) {
                    idx = j;
                                        
                } 
            }
            sb.append(idx + " ");
            idx = -1;
        }
        System.out.println(sb);
        


S를 받아서 글자 하나하나를 배열로 집어 넣고, 알파벳도 일일이 배열에 집어 넣었다. 

그 다음 하나씩 비교해 보고 그 때 같은 글자라면 그때의 인덱스를 스트링빌더에 넣어서 출력되도록 했다.

글자가 없는 경우에는 -1을 출력해야 하니, idx값을 항상 -1로 초기화를 시켜줬다.


나름 뿌듯함을 느끼며 에잉 뭐야~ 킴썽 많이 컸어 하고 후다닥 제출했는데, 또 틀렸다고 나온다. 아니 이렇게 몹시 짜증날수가

왜 또ㅠㅠ 하면서 가만히 예제를 비교해 보는데,


어째서인지 나는 7 5가 아닌 7 6이었다.

그래서 찍히는 숫자를 하나씩 출력해 봤다. 

중복 생각을 1도 못한거...

ㄷㄷㄷㄷㄷ...

ㄷㄷㄷㄷㄷㄷㄷㄷㄷㄷㄷㄷㄷㄷㄷ

그러니 그 다음 숫자가 들어오면 당연히 다음 숫자의 인덱스가 찍혀서 나오는 것이었 것이었 것이었던 것입니다.... 바보 

아직까지도 포문을 제대로 이해 못한 바보의 몸부림

오랜만에 10분만에 문제 다 푸나 했더니 

그런 염소같은 생각은 저리 집어 치워야 했습니다.

a가 중복되니 본래는 0 -1 -1 -1 ... 이렇게 가야 하는데, 5번째 a때문에 5로 찍혀 나오는 거..


그래서 이프문을 미친듯이 쓰고 헤매고 그랬는데..

그래서 바보같이 하루를 다 보내고 그랬는데..

....

break....

포문에서도 쓸 수 있는거라면서요?..

그렇다면서요?...

와?...

ㄷㄷㄷㄷㄷㄷㄷㄷㄷㄷㄷㄷㄷㄷㄷㄷㄷㄷㄷㄷㄷㄷㄷㄷㄷㄷㄷㄷㄷㄷㄷㄷㄷㄷㄷㄷㄷㄷㄷㄷㄷㄷㄷㄷ

바보는 웁니다.

오늘 또 머리가 모자란 중생은 몸이 고생을 하다 break를 알게 됩니다.

그러니까 알파벳 o를 가진 배열이 A[j]의 배열과 비교하다 첫번 째 o를 찾게 되면 그 자리에서 멈추고 p와 같은 것이 있는지 다음 반복문으로 넘어가는 ㄱ ㅓ...... 휴....후....으...아....꺆....


그래서 if문에 break하나 넣어줬더니

끝났다.

눈물나는군

눈무리 앞을..

눈무리 그렁그렁..

눈ㅁ..ㅁ

ㅇ....r......

더 2상 울지 않으zㅣ....

naver.......

naver.....................................


break문

break;

break 이름;

break문은 반복문인 for문, while문, do-while문, switch문을 실행 중지할 때 사용한다. 만약 반복문이 중첩되어 있을 경우 break문은 가장 가까운 반복문만 종료하고 바깥쪽 반복문은 종료시키지 않는다. 중첩된 반복문에서 바깥쪽 반복문까지 종료시키려면 바같쪽 반복문에 이름(라벨)을 붙이고 "break 이름;"을 사용하면 된다.   



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
import java.util.Scanner;
 
public class FindA {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        StringBuilder sb = new StringBuilder();
        String S = scan.nextLine();
        char A [] = S.toCharArray();
        char B [] = {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};
        int idx = -1;
        for(int i=0 ; i<B.length ; i++) {
            for(int j=0 ; j<S.length() ; j++) {
                if(A[j] == B[i]) {
                    idx = j;
                    break;                    
                } 
            }
            sb.append(idx + " ");
            idx = -1;
        }
        System.out.println(sb);
        
        scan.close();
        
    }
}
 
cs


반응형

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

[문자열사용하기] 다이얼  (0) 2018.03.07
[문자열사용하기] 상수  (0) 2018.03.06
[1차배열] 평균점수  (4) 2018.02.16
[1차배열] 음계  (0) 2018.02.15
[1차배열] OX 퀴즈  (0) 2018.02.13