서울에서 김서방 찾기

w=j·2021년 5월 7일
0
post-custom-banner

1. 서울에서 김서방 찾기

  • 문제 :
    String형 배열 seoul의 element중 "Kim"의 위치 x를 찾아, "김서방은 x에 있다"는 String을 반환하는 함수, solution을 완성하세요. seoul에 "Kim"은 오직 한 번만 나타나며 잘못된 값이 입력되는 경우는 없습니다.
  • 조건 사항:
    1.seoul은 길이 1 이상, 1000 이하인 배열입니다.
    2.seoul의 원소는 길이 1 이상, 20 이하인 문자열입니다.
    3."Kim"은 반드시 seoul 안에 포함되어 있습니다.

입출력 예시
seoul : ["Jane", "Kim"]
return : "김서방은 1에 있다"

  • 문제 해결 STEP
    1.Seoul은 배열이다.
    2."Kim" 위치는 배열의 index로 반환할수있다.
    3."Kim" 위치 값(배열의 index)을 저장하는 변수가 필요하다.
    4.저는 배열의 각 index에 있는 value(값)를 for문을 이용해 "Kim"과 동일한 문자열이 있을경우 해당 배열의 index를 반환하도록 했습니다.
function solution(seoul) {
    var KimInd; // "Kim" 배열의 인덱스값 저장하는 변수.
    
    for (var seoulInd in seoul) {        // seoulInd 에는 seoul 배열의 index가 할당된다. 
    	var seoulName = seoul[seoulInd]; // seoulInd 값을 이용하여 seoul의 각 index의 value(값) 가져와 seoulName 변수에 할당한다.
    	if (seoulName == "Kim") {        // 배열의 value(값)중에서 "Kim" 동일한 문자열이 있을경우 함수 블록을 실행한다. 
        	KimInd = seoulInd        // "Kim" 동일한 문자열의 index를 변수 "KimInd"에 저장한다.
        }
    }
    var answer = '김서방은 ' + KimInd + '에 있다';
    return answer;
}
  • 저는 일단 위에 코드처럼 해결하였다.
  • 제가 코드다 풀고 문제를 다시한번 봤을때 제가 놓친 부분이 있었습니다.
  • 그부분은 "String형 배열 seoul"이다.
  • String형 배열?! 유사 배열 객체?! 그럼 String 객체의 메서드도 사용가능할것 같다고 생각했습니다.
  • 해당 메서드중에서 인자로 "문자열" 넘겨주고 index를 반환해주는 메서드가 있는가를 찾아 봤는데 메서드 중에 indexOf() 메서드가 있었다.
  • 그럼 indexOf() 메서드를 어떻게 사용할까?!....
  • 일단 그럼 해당 메서드는 "kong", "woo jeong"이런 문자열에 사용이 가능한데 seoul은 ["Jane", "Kim"] String형 배열이다.
  • 여기서 한번더 생각해봤습니다. var str = new String("kong"); 문자열을 String 생성자 함수로 생성하게된다면 String 객체 내부에는 프로퍼티가 어떻게 생성이 되었는가?!
 String
	0: "k"
	1: "o"
	2: "n"
	3: "g"
  • 위 와 같이 유사 배열 형태로 생성되는것을 볼수 있다.
  • 어!!! 그러면 "seoul도 String형 배열"이라고 했는데
 String
 	0 : "Jane"
    	1 : "Kim"
  • 위와 같이 seoul은 되어 있을거라고 짐작할수 있다.
  • 그러면 indexOf() 메서드를 적용하게 된다면
seoul.indexOf("Kim"); // 인자를 "Kim" 넘겨주고 반환값을 해당 index인 1을 반환한다. 
  • 해당 문제 코드를 다시 풀면 아래와 같이 풀수 있다.
function solution(seoul) {
    
    var index = seoul.indexOf("Kim");
    
    var answer = '김서방은 ' + index + '에 있다';
    return answer;
}
  • 이전 코드보다 훨씬 간결해진걸 볼 수 있습니다.

코드 리뷰
1. 저는 처음에는 seoul이라는 배열을 각 for문을 돌려서 해당 value(값)을 하나하나 다 비교해서 "Kim"의 index를 찾으려고 했습니다.
2. 두번째 코드에서는 String 객체의 메서드를 사용하여 해당 코드 결과는 같지만 소스코드 내용이 훨씬 간결하게 바뀌었다.
3. 첫번째 소스코드와 두번째 소스코드중 두번째가 처음 딱 봤을때 아!! 이코드는 지금 어떠한 역활을하고 어떠한 내용을 실행하고 있는가를 한눈에 보인다.
4. 그래서 앞으로 코드를 작성할때는 소스코드의 변수를 남발하지말고 내장객체의 메서드를 잘이용하여 간결하게 표현하는 생각을 중점적으로 할려고 합니다.

profile
ENJOY!! PROGRAMING!!
post-custom-banner

0개의 댓글