알고리즘 : 프로그래머스 : JAVA : 서울에서 김서방 찾기

2022. 1. 17. 17:04알고리즘/프로그래머스

반응형

<문제>


<코드 & 설명>

class Solution {
    public String solution(String[] seoul) {
        String answer = "";
        
        for(int i=0; i<seoul.length; i++) {
            if(seoul[i].equals("Kim")) {      // seoul[i] 값이 Kim과 동인한 경우
                answer = "김서방은 " + i + "에 있다";
	            break;  // Kim을 찾은 후에는 for를 계속할 이유가 없다.
            }
        }
        
        return answer;  // 값 반환
    }
}

String 형태의 배열을 하나 받아서 Kim 이라는 값이 적힌 배열이 몇번째 값인지 알아내는 문제이다.
제한사항은 별로 중요하지 않고 배열 안에 Kim이 어디에 들어있는지만 확인하면 된다.

일단 배열을 보낸 뒤에 for문을 배열의 길이만큼 돌리는데,
i = 0; i<배열명.length; i++로 배열의 처음부터 끝까지 확인이 가능하다.
이제 for문 안에서 if문을 넣어서 Kim과 같은 경우를 확인해줘야 하는데,
seoul[i] == "Kim"이 아니라
seoul[i].equals("Kim")을 쓰는 이유는 비교하는 해시코드 주소가 다르기 때문이다.
그렇기 때문에 숫자가 아닌 문자를 비교할 때는 반드시 ==가 아닌 eqauls를 사용해 줘야 한다.
마지막으로 Kim을 찾고 나면 "김서방은" "에 있다"를 찍고 바로 break;를 넣어주는데,
이미 Kim을 찾은 상황에서 for문을 더 돌릴 필요가 없기 때문에 break;를 넣어

바로 반복문을 중단시키고 값을 반환하는 것이다.

 

<.eqauls()>
변수.eqauls(변수) 를 통해 실제 텍스트가 똑같은지 비교를 할 수 있다.
똑같은 텍스트인데도 ==로 비교가 안 되는건, 새로 정의하느라 값은 똑같은데 주소가 달라져서 그렇다.
System.identityHashCode(변수명)를 통해 실제 어디에서 가져오는지 주소를 확인할 수 있다.
즉!  ==는 숫자를 비교할 때 사용하고, equals()는 텍스트를 비교할때 사용하자!

 

반응형