본문 바로가기
알고리즘

[LeetCode/JAVA] 389. Find the Difference

by 상후 2021. 7. 17.
728x90
반응형

https://github.com/ROUTINE-STUDY/Algorithm

 

ROUTINE-STUDY/Algorithm

초보 알고리즘 스터디 / 누구나 참여 가능 :runner:. Contribute to ROUTINE-STUDY/Algorithm development by creating an account on GitHub.

github.com

알고리즘 스터디를 진행하고 있습니다.
초보들로 구성되어있으며, 열심히 풀어보고 풀이 방식을 공유하고 피드백을 해주는 스터디입니다. 
문의는 댓글 혹은 GitHub 주소를 참고해주세요.

문제 출처 : https://leetcode.com/problems/find-the-difference/

 

Find the Difference - LeetCode

Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.

leetcode.com

문제 설명

출처 : LeetCode

문자열 s와 t가 주어집니다.
문자열 t는 s를 무작위로 섞은 뒤 임의의 위치에 문자 하나를 추가한 문자열입니다.
이때 t에 추가된 문자를 반환하세요
풀이 방법
문자열 내 알파벳의 개수를 계산하는 방식을 배열을 통해 풀이하였습니다.
1. 알파벳의 수(26개) 만큼의 배열을 생성합니다.
2. 길이가 긴 t문자열의 길이만큼 반복하면서 s의 문자들은 + 1 / t의 문자들은 - 1을 해줍니다.
3. 순회를 마치고 최종적으로 문자의 개수가 음수인 알파벳을 return 합니다.
내 코드(JAVA)

 

// 기존 많이 사용했던 알파벳별 개수를 이용하였습니다.
public char findTheDifference(String s, String t) {
    char res = '0';
    int[] arr = new int[26];

    for(int i=0; i<t.length(); i++) {
        if(i < s.length()) {
            arr[s.charAt(i)-'a']++;
        }
        arr[t.charAt(i)-'a']--;
    }

    for(int i=0; i<arr.length; i++) {
        if(arr[i] < 0) {
            res = (char)(i+'a');
            break;
        }
    }

    return res;
}
스터디 피드백 내용
- 문자 수 카운팅 시 if문을 걸지 않고 조건식을 s.length 까지 하고, t의 마지막 문자는 for문을 벗어나고 넣는 방법

 

for(int i=0; i<s.length(); i++) {
	arr[s.charAt(i)-'a']++;
	arr[t.charAt(i)-'a']--;
}
arr[t.charAt(t.length()-1)-'a']--;

 

문제에서 한 문자만 추가한 유형이기 때문에 위 방법은  반복문 내 불필요한 조건문을 없앨 수 있어 더 효율적인 방법인 것 같습니다. 

728x90
반응형

댓글