x 사이의 개수

2023. 5. 17. 00:09Programmers/Java

문제

 

결과

 

풀이

1. 처음 작성한 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import java.util.ArrayList;
 
class Solution {
    public ArrayList solution(String myString) {
        
        String[] s = myString.split("x");
        
        ArrayList<Integer> ii = new ArrayList<>();
        
        for(int i=0; i<s.length; i++){
            
            ii.add(s[i].length()) ;    
        }       
        return ii;
    }
}
cs

이런 방식으로 작성한 사람이 많을 것 같은데 이때는 통과하지 못했다.

 

두 테스트의 차이는 테스트1은 문자열의 마지막이 구분자이고 테스트2는 아니라는 것이다.

split()은 안의 구분자로 문자열을 끊기 때문에 구분자 자신은 나눠지는 문자열에 포함되지 않는다.

그렇기 때문에 마지막 x는 카운트되지 않기 때문에 0이라는 값이 나올 수 없다.

 

2. split(String regex, -1)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import java.util.ArrayList;
 
class Solution {
    public ArrayList solution(String myString) {
        
        String[] s = myString.split("x",-1);
        
        ArrayList<Integer> ii = new ArrayList<>();
        
        for(int i=0; i<s.length; i++){
            
            ii.add(s[i].length()) ;    
        }       
        return ii;
    }
}
cs

구분자까지 카운트하려면 split(String regex, -1)로 쓰면 된다.

 

엄밀히 말하자면 "실제로" 구분하는데 쓰이는 구분자를 제외하고 "구분하는데 쓰이지 않는" 구분자를 null로 처리한다.

 

 

예를 들어보자.

String myString1 = "ox"
String myString2 = "oxx"
String myString3 = "oxox"
String myString4 = "oxxoxx"

이 4가지를 모두 spilit("x", -1) 시켜보겠다.

 

1) ox

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import java.util.Arrays;
 
public class Study {
 
    public static void main(String[] args) {
 
        String my = "oxx";
        String my2 = my + "";    
        
        String[] s = my2.split("x",-1);
        
        System.out.println(Arrays.toString(s));
                
    }
}
 
cs
결과 : [o, ]

o :구분자로 끊어진 문자 

x : 구분자로 사용되지 않은 구분자

     → x가 문자와 문자 사이에서 끼어서 끊는 역할을 하지 않고 있음

 

2) oxx

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import java.util.ArrayList;
 
public class Study {
 
    public static void main(String[] args) {
 
        String my = "oxx";
        String my2 = my + "";    
        
        String[] s = my2.split("x",-1);
        
        ArrayList<Integer> ii = new ArrayList<>();
        
        for(int i=0; i<s.length; i++) {
            
            ii.add(s[i].length());
        }
        
        System.out.println(ii);
                
    }
 
}
cs
결과 : [o, , ]

o : 구분자로 끊어진 문자 

x : 구분자로 사용되지 않음 → null

x : 구분자로 사용되지 않음 → null 

 

3) oxox

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import java.util.Arrays;
 
public class Study {
 
    public static void main(String[] args) {
 
        String my = "oxox";
        String my2 = my + "";    
        
        String[] s = my2.split("x",-1);
        
        System.out.println(Arrays.toString(s));
                
    }
}
 
cs
결과 : [o, o, ]

o : 구분자로 끊어진 문자

x : 구분자로 사용되었음 

o : 구분자로 끊어진 문자

x : 구분자로 사용되지 않음 → null

 

4) oxxoxx

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import java.util.Arrays;
 
public class Study {
 
    public static void main(String[] args) {
 
        String my = "oxxoxx";
        String my2 = my + "";    
        
        String[] s = my2.split("x",-1);
        
        System.out.println(Arrays.toString(s));
                
    }
}
 
cs
결과 : [o, , o, , ]

o : 구분자로 끊어진 문자

x : 구분자로 사용되었음 

x : 구분자로 사용되지 않음 → null

o : 구분자로 끊어진 문자

x : 구분자로 사용되지 않음 → null

x : 구분자로 사용되지 않음 → null

 

 

이로인하여 null로 처리된 구분자는 length를 0으로 처리할 수 있다.

'Programmers > Java' 카테고리의 다른 글

마법의 엘리베이터  (0) 2023.08.04
전국 대회 선발 고사  (0) 2023.05.24
qr code  (2) 2023.05.13
폰켓몬  (0) 2023.01.29
2016년  (2) 2023.01.29