728x90
반응형
https://github.com/ROUTINE-STUDY/Algorithm
알고리즘 스터디를 진행하고 있습니다.
초보들로 구성되어있으며, 열심히 풀어보고 풀이 방식을 공유하고 피드백을 해주는 스터디입니다.
문의는 댓글 혹은 GitHub 주소를 참고해주세요.
문제 출처 : https://leetcode.com/problems/find-the-difference/
문제 설명
문자열 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
반응형
'알고리즘' 카테고리의 다른 글
[LeetCode/JAVA] 58. Length of Last Word (0) | 2021.07.18 |
---|---|
[LeetCode/JAVA] 66. Plus One (0) | 2021.07.18 |
[LeetCode/JAVA] 14. Longest Common Prefix (0) | 2021.07.17 |
[LeetCode/JAVA] 500. Keyboard Row (0) | 2021.07.17 |
[LeetCode/JAVA] 637. Average of Levels in Binary Tree (0) | 2021.07.17 |
댓글