알고리즘문제

김서방 찾기

단점이없어지고싶은개발자 2021. 5. 15. 02:19
반응형

 

문제는 string배열 seoul이라는 배열에 'Kim'을 찾아 그 값을 구하는 것이다.

 

처음에는 for을 이용해서

function solution(seoul) {

answer = ' ';

for (i = 0; i = seoul.length; i++) {

  if ( i == 'Kim) {

 answer = '김서방은 ' + i ' +'에 있다';

}

}

return answer;

}

로 생각했었다. 그런데 length는 길이를 구하는거지 길이를 구한다면 jane 다음에 kim이 오면 4가 나올 것 같았다.

예제를 생각하면 1이 나오는게 맞아서 이리저리 찾다가 indexOf를 찾았다.


문자열에서 문자(열) 찾기

문자열, 즉 string 타입 안에서 특정 문자 또는 문자열의 위치를 찾아주는 함수
위치라고 하면 position 을 가리키는 것이다

String.indexOf()
주어진 문자열 str 앞에서붙 (index: 0) 지정한 searchValue가 처음부터
발견되는 위치의 index 반환한다

문법 (syntax)
*str*.indexOf(*searchValue*[, *fromIndex*])

매개변수 (Parameter)
-searchValue
찾고자 하는 문자 또는 문자열 (대소문자 중요) 정확한 string 형식이 아니라면
undefined로 간주하고 이것을 기준 문자열 str에서 찾아볼 것이다

integer, 즉 숫자 형식으로 검색을 시작할 index로 기준을 지정해줄 수 있다
만약 이값이 0보다 낮고(음수) 그리고 str.length 문자열의 길이보다 높다면, 본 함수는
단순히 str 전체를 검색할 것이다

반환 (return)
str에서 searchValue가 0부터 시작하여 처음부터 검색되는 index 값을 반환한다
만약, searchValue가 존재하지 않는다면 -1을 반환한다


indexOf를 이용하면 jane 을 넘어서 내가 찾는 문자열과 맞다면 그 index가 나올거라 생각했다. 'jane' = 0 'kim' = 1; 그래서 indexOf를 이용해서 풀었다.

 

function solution(seoul) {

 return '김서방은 ' + seoul.indexOf('kim') + '에 있다';

}

로 해서 나타났다.

 

보완해야 될 점은 function 함수 다음에 solution 보다는 김서방의 위치를 찾으니까 function searchKim(seoul) 이 날 것 같다. 
또한 문제를 풀고 다른 사람들이 한 것도 볼 수 있었는데 length를 이용해서 풀기도 했었다. 처음 부분은 나랑 같았지만 끝 부분이 달라서 그 부분을 좀 더 공부해야겠다.
지금 머리속에 해메이는 것인 length가 길이인데, "jane", "kim"을 넣으면 k자리가 5라고 생각되서 안될텐데 다른 사람들이 처리한 부분이 좀 의아하게 생각됐다. 부족한 부분을 좀 더 공부하고 채워 넣어야겠다.


length 를 이용해서 풀이

 

function solution(seoul) {
    for(let i = 0; i <= seoul.length; i++) {
        if (seoul[i] === 'Kim') {
            return '김서방은 ' + i + '에 있다';
        }
    }
}

'jane', 'Kim' 을 따로 입력하면 Kim으로 넘어가면 index가 0으로 초기화 되서 1이 된다면 length가 길이이기에 kim전체니까 정답에 3으로 나올거라 예상해서 안된다고 생각되는데 1이 되서 정답처리가 됐다. 음... 더 공부하자 

 

!!!!

배열을 선언 할 때 arr = {'a', 'b', 'c'} 를 선언한다면 index는 length - 1 이다. 0 1 2 라면 길이는 1 2 3 이다.

내가 착각했던 부분이 따옴표로 감싸주면 그것 자체가 배열 하나다. java나 c에서 말하는 char이다 string이라는 개념이 아니라 그래서 jane = 0번째 배열, Kim = 1번째 배열 그래서 length를 구할 때 길이가 2이기 때문에 index인 1이 나오는 것이다. 

수정//
arr = ['jane', 'kim']    ,로 처리되서 jane은 index = 0; kim 은 index = 1; 

반응형

'알고리즘문제' 카테고리의 다른 글

프로그래머스 - 행렬의 덧셈  (0) 2021.09.20
프로그래머스 - 문자열 내림차순으로 배치하기  (0) 2021.09.10
수박수박수 문제  (0) 2021.05.17
가운데 글자 가져오기  (0) 2021.05.16
Codeup 1045문제  (0) 2021.04.28