티스토리 뷰

[문제]

출처 : https://school.programmers.co.kr


[해설]

- 문제 자체는 어렵지 않았다.

class Solution {
    public int solution(int num, int k) {
        int answer = 0;
        String numS = String.valueOf(num);
        String kS = String.valueOf(k);
        if(numS.indexOf(kS) == -1) {
            answer = -1;
        } else {
            String[] arr = numS.split("");
            for(int i = 0; i < arr.length; i++) {
                if(arr[i].equals(kS)) {
                    answer = i + 1;
                    break;
                }
            }
        }
        return answer;
    }
}
[내가 몰랐던 것]
- indexOf()는 특정 문자나 문자열이 앞에서부터 음 발견되는 인덱스를 반환한다는 사실
- 위의 코드에서 반복문을 사용한 이유는 예를 들어 문자열 "apple"에서 "p"의 위치를 찾는다고 했을 때 p가 2개 있으므로 index[1]과 index[2] 중에 어떤 것을 반환할 지 몰라가지고 반복문과 break를 사용한 것이다.
- 즉, 처음 발견되는 인덱스를 반환한다는 사실을 몰라가지고 혹여나 index[1]이 아니라 index[2]를 반환할까봐 오바를 떤 것이다.

https://docs.oracle.com/javase/7/docs/api/

- 만약 위의 사실을 알았다면 아래와 같이 코드를 구성했을 것이다.

class Solution {
    public int solution(int num, int k) {
        String numStr = String.valueOf(num);
        String kStr = String.valueOf(k);
        return ((numStr.indexOf(kStr) == - 1) ? -1 : numStr.indexOf(kStr) + 1);
    }
}

- 훨씬 더 간단하며 미세하지만 성능도 더 좋았다.


indexOf 정리

- 이번 글의 핵심은 indexOf method를 정리하는 것이다. 그래야 다음에 문제를 풀 때 더 수월하게 풀 수 있을 것이다.

- indexOf method는 특정 문자나 문자열이 앞에서부터 처음 발견되는 인덱스를 반환하며 찾지 못했을 경우 -1을 반환

 

1. indexOf("찾을 특정 문자", "시작 위치") 

indexOf(String)
indexOf(String, int) = indexOf(String, fromIndex)

ex)
String hello = "HelloWorld_MyWorld";
System.out.println(hello.indexOf("World")); // 5
--> 변수 hello의 문자열 중 "World"를 찾고 시작하는 index를 return(W의 index를 리턴)

System.out.println(hello.indexOf("World", 10)); // 13
--> 변수 hello의 문자열의 index = 10 부터 "World"를 찾고 해당 index를 return

- parameter로 전달받은 문자열을 원본 문자열의 앞에서부터 탐색, 처음으로 parameter의 문자열이 나오는 index를 return

- 시작 위치를 지정해 특정 문자열의 위치부터 찾기 시작

- 시작 위치는 생략 가능하며 생략할 경우 index = 0 번째 부터 찾기 시작

 

2. lastIndexOf(String), lastIndexOf(String, int)

lastIndexOf(String)
lastIndexOf(String, int) = lastIndexOf(String, fromIndex)

String str = "abcabc";
str.lastIndexOf("c");	 // 5
--> "abcabc" 문자열의 마지막 "c"의 index = 5

str.lastIndexOf("c", 2); // 2
--> "abcabc" 문자열에서 index 2부터 거꾸로 탐색을 했을 때 처음 나오는 "c"의 index = 2
----------------------- 다른 예제 -----------------------
String s = "abbbba";			
System.out.println(s.lastIndexOf(97));		// 5
System.out.println(s.lastIndexOf("a"));		// 5
System.out.println(s.lastIndexOf(97, 3));	// 0
System.out.println(s.lastIndexOf("a", 5));	// 5
cf) s.lastIndexOf(97, 3)은 아스키코드를 이용해 찾는 것이다.

- lastIndexOf는 시작점이 뒤에서부터 출발한다.
- fromIndex는 시작점인건 같지만 lastIndexOf는 뒤에서부터 시작하기때문에 만약 위의 코드에서
fromIndex = 3으로 지정하게되면 (3, 2, 1, 0) 순서로 위치를 찾는다.
- 그래서 'a'가 위치한 0이 return 된다.
- 즉, fromIndex로부터 앞을 자르냐 뒤를 자르냐의 차이이다.

- parameter로 전달받은 문자열을 원본 문자열의 뒤에서부터 탐색, 처음으로 parameter의 문자열이 나오는 index를 return

- 1번의 indexOf method가 문자열의 index = 0 부터 탐색했다면 lastIndexOf는 반대방향으로 문자열을 찾는다.

- 즉, 특정 문자나 문자열이 뒤에서부터 처음 발견되는 index를 반환하며 찾지 못했을 경우 -1을 return

출처 :&nbsp;https://hianna.tistory.com/660

- 뒤에서부터 찾기 시작해서 찾았을경우 index를 반환하는데 중요한 것은 오른쪽에서 몇번째 위치하는지를 반환하는게 아니라 기존과 동일하게 index 즉, 왼쪽에서 몇번째 위치하는지를 index로 반환한다.

 

※ 중요 : indexOf(String, fromIndex)와 lastIndexOf(String, fromIndex)는 fromIndex로부터 앞을 자르냐 뒤를 자르냐의 차이이다.

indexOf(String, fromIndex) : fromIndex로부터 앞에서 부터 자른다.
lastIndexOf(String, fromIndex) : fromIndex로부터 뒤에서 부터 자른다.

String s = "abbbba";			
s.indexOf("a", 3);  -->  0, 1, 2, 3 순으로 자른다. = (index = 3 ~ index = 5) 사이에서 검색
s.lastIndexOf("a", 3);  -->  3, 2, 1, 0 순으로 자른다. = (index = 3 ~ index = 0) 사이에서 검색

 

cf) 참고

https://docs.oracle.com/javase/7/docs/api/

 

Java Platform SE 7

 

docs.oracle.com

https://velog.io/@jakezo/JAVA-%EC%9E%90%EB%B0%94indexOflastIndexOf%ED%8A%B9%EC%A0%95-%EB%AC%B8%EC%9E%90-%EC%9C%84%EC%B9%98-%EC%B0%BE%EA%B8%B0

 

[JAVA] 자바_indexOf/lastIndexOf(특정 문자 위치 찾기)

indexOf() 라는 기초에 대해 잘 숙지를 못했기에 몇시간동안 뻘짓을 했다..지금부터는 확실히 익혀두어 잘 써보도록 하자indexOf()indexOf(String str)indexOf(int ch)indexOf(int ch, int fromIndex)indexOf(

velog.io

https://codechacha.com/ko/java-string-indexof-lastindexof-java/

 

Java - indexOf(), lastIndexOf()으로 문자열의 위치 찾기

자바 String의 indexOf()와 lastIndexOf()의 사용 방법에 대해서 정리하였습니다. indexOf와 lastIndexOf는 String에서 특정 문자열의 인덱스를 찾는데 사용하는 메소드입니다.

codechacha.com

https://hianna.tistory.com/660

 

[Java] 뒤에서부터 문자열 위치 찾기 (lastIndexOf())

lastIndexOf() public int lastIndexOf(String str) public int lastIndexOf(String str, int fromIndex) public int lastIndexOf(int char) public int lastIndexOf(int char, int fromIndex) indexOf() 메소드는 파라미터로 전달받은 문자열을 원본 문

hianna.tistory.com

https://priming.tistory.com/10

 

[Java] String - 4. indexOf, lastIndexOf : 문자열 위치 찾기

문자열에서 특정 문자(열)의 위치를 찾거나 위치를 통해 문자(열)을 찾는 메소드들을 모두 이 파트에서 다룰 예정이다. 이번에 알아볼 메소드는 indexOf와 lastIndexOf이다. 둘다 특정문자의 위치가

priming.tistory.com

https://developer-talk.tistory.com/194

 

자바 온라인 컴파일러 사이트 추천

Java를 사용하여 프로그램 또는 웹 사이트를 개발하는 경우에는 개발 환경을 셋팅해야 합니다. 하지만, 학습 또는 과제를 목적으로 간단한 코드를 작성하기 위해서 Java를 설치하고 이클립스와 같

developer-talk.tistory.com

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/06   »
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
글 보관함