기록하는 공부

[Programmers] 120903 배열의 유사도 (equals 함수) 본문

Language/Java

[Programmers] 120903 배열의 유사도 (equals 함수)

SS_StudySteadily 2023. 7. 11. 15:12
728x90
반응형

 

문제 출처

 

https://school.programmers.co.kr/learn/courses/30/lessons/120903

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

 

 


 

나의 오답

 

import java.util.*;

class Solution {
    public int solution(String[] s1, String[] s2) {
        
        int answer = 0;
        
        for(int i=0; i<s1.length; i++) {
            for(int j=0; j<s2.length; j++) {
                if(s1[i] == s2[j]) {
                    answer += 1;
                }
            }
        }
        return answer;
    }
}

 

다른 언어와 달리 자바는 문자열의 비교를 ==로 하지 않는 것을 알게 되었다.

그걸 처음엔 모르고 비교했다가 오답이 발생해 몰랐었는데 자바에는 equals라는 함수가 있음을 배우게 되었다.

 

 

 

 


 

자바 equals 함수

 

자바에서는 문자열을 비교할 때 equals 함수를 사용한다.

대소문자도 구별하여 비교하는 특징이 있으며, 비교하려는 문자열이 Null인 경우에는 NullPointerException이 발생한다.

하지만 인자로 전달되는 문자열이 Null인 경우에는 발생하지 않는다.

 

String str1 = null;
String str2 = "Hello";

System.out.println(str1.equals(str2));
==> NullPointerException 발생

System.out.println(str2.equals(str1));
==> false

 

 

 

 


 

나의 성공 풀이

 

import java.util.*;

class Solution {
    public int solution(String[] s1, String[] s2) {
        
        int answer = 0;
        
        for(int i=0; i<s1.length; i++) {
            for(int j=0; j<s2.length; j++) {
                if(s1[i].equals(s2[j]) == true) {
                    answer += 1;
                }
            }
        }
        return answer;
    }
}

 

이중 for문을 사용하여 문자열 배열 s1과 s2를 비교했다.

첫 번째 for문은 s1의 문자열 길이만큼 i를 반복하면서 s1의 i번째 인덱스에 있는 문자열을 두 번째 for문에서 s2의 0번째부터 s2의 문자열 길이만큼 인덱스 j에 해당하는 문자열과 비교하도록 했다.

equals 함수를 사용하여 s1의 i 인덱스와 s2의 j 인덱스 안에 문자열 값을 비교해 그 값이 같다면(true라면) answer에 값을 1씩 더하도록 코드를 짜보았다.

728x90
반응형