코딩테스트/자바스크립트

[프로그래머스-javascript/level1] 김서방 찾기

문앵 2021. 5. 26. 21:11

 

서울에서 김서방 찾기

 

<문제 설명>

String형 배열 seoul의 element중 "Kim"의 위치 x를 찾아, "김서방은 x에 있다"는 String을 반환하는 함수, solution을 완성하세요. seoul에 "Kim"은 오직 한 번만 나타나며 잘못된 값이 입력되는 경우는 없습니다.

 

제한 사항

  • seoul은 길이 1 이상, 1000 이하인 배열입니다.
  • seoul의 원소는 길이 1 이상, 20 이하인 문자열입니다.
  • "Kim"은 반드시 seoul 안에 포함되어 있습니다.

<입출력 예>

seoul return
["Jane", "Kim"] "김서방은 1에 있다"

 

 


문제를 잘못 읽어서 그냥 광활한 서울에 있는 김서방의 랜덤한 좌표를 출력하라는 문제인줄 알았다...

 

문제를 제대로 파악해 보자면,

string형 배열인 seoul이 있습니다. seoul의 element중에는 Kim이 존재합니다. 

=> 그니까 Kim이 몇번째 배열에 있는지 찾아낼 수 있는 로직을 완성하란 소리..

이럴때는 indexOf 함수를 이용하면 됩니다. indexOf 에도 여러 종류가 있습니다.

1. String.prototype.indexOf()

indexOf() 메서드는 호출한 String 객체에서 주어진 값과 일치하는 첫 번째 인덱스를 반환합니다. 일치하는 값이 없으면 -1을 반환합니다.

- 문자열 내에 있는 문자들은 왼쪽에서 오른쪽 방향으로 순번이 매겨집니다.

제일 처음 문자는 0번째 순번(index)이며, stringName 문자열의 마지막 문자의 순번은 stringName.length -1 입니다. 

- indexOf대소문자를 구분합니다.

 

ex1 ) 

const paragraph = 'The quick brown fox jumps over the lazy dog. If the dog barked, was it really lazy?';

const searchTerm = 'dog';
const indexOfFirst = paragraph.indexOf(searchTerm);

console.log(`The index of the first "${searchTerm}" from the beginning is ${indexOfFirst}`);
// expected output: "The index of the first "dog" from the beginning is 40"

console.log(`The index of the 2nd "${searchTerm}" is ${paragraph.indexOf(searchTerm, (indexOfFirst + 1))}`);
// expected output: "The index of the 2nd "dog" is 52"

이 코드를 실행시켜보면

> "The index of the first "dog" from the beginning is 40"
> "The index of the 2nd "dog" is 52"

가 출력됩니다. 

" The quick brown fox jumps over the lazy dog. If the dog barked, was it really lazy? "

에서 "dog"은 40번째에 처음으로 나오고 두번째 "dog"은 52번째 글자로 나온다는 의미입니다.

 

ex2)

var anyString = 'Brave new world';

console.log('The index of the first w from the beginning is ' + anyString.indexOf('w'));
// 첫번째 w 문자 위치는 8
console.log('The index of the first w from the end is ' + anyString.lastIndexOf('w'));
// 마지막 w 문자 위치는 10

console.log('The index of "new" from the beginning is ' + anyString.indexOf('new'));
// 첫번째 new 문자열 위치는 6
console.log('The index of "new" from the end is ' + anyString.lastIndexOf('new'));
// 마지막 new 문자열 위치는 6

ex1 과 마찬가지.

Array.prototype.indexOf()

- indexOf() 메서드는 배열에서 지정된 요소를 찾을 수 있는 첫 번째 인덱스를 반환하고 존재하지 않으면 -1을 반환합니다.

- 구문 : arr.indexOf(searchElement[, fromIndex]) 

          searchElement: 배열에서 찾을 요소입니다. / fromIndex (Optional): 검색을 시작할 색인입니다.

          인덱스가 배열의 길이보다 크거나 같은 경우 -1이 반환되므로 배열이 검색되지 않습니다.

          제공된 색인 값이 음수이면 배열 끝에서부터의 오프셋 값으로 사용됩니다.

          제공된 색인이 음수이면 배열은 여전히 앞에서 뒤로 검색됩니다.

          계산 된 인덱스가 0보다 작으면 전체 배열이 검색됩니다. 기본값 : 0 (전체 배열 검색).

 

ex1) 

var array = [2, 9, 9];
array.indexOf(2);     // 0
array.indexOf(7);     // -1
array.indexOf(9, 2);  // 2
array.indexOf(2, -1); // -1
array.indexOf(2, -3); // 0

 

ex2) 요소의 모든 항목 찾기

var indices = [];
var array = ['a', 'b', 'a', 'c', 'a', 'd'];
var element = 'a';
var idx = array.indexOf(element);
while (idx != -1) {
  indices.push(idx);
  idx = array.indexOf(element, idx + 1);
}
console.log(indices);
// [0, 2, 4]

※ while문

- while (condition) statement

반복이 시작되기 전에 조건문은 참,거짓을 판단받게 된다.

만약 조건문이 참이라면, while문 안의 문장들이 실행된다. 거짓이라면, 문장은 그냥 while 반복문 후로 넘어간다.

 

다시 문제로 돌아가자면


string형 배열인 seoul이 있습니다. seoul의 element중에는 Kim이 존재합니다.

=> 그니까 Kim이 몇번째 배열에 있는지 찾아낼 수 있는 로직을 완성하란 소리.

 

 

반응형