728x90
[링크](https://leetcode.com/problems/redistribute-characters-to-make-all-strings-equal/)
각 문자열 배열들의 문자를 옮길 수 있습니다.
문자를 옮겨서 모두 같은 문자열로 바꿀 수 있으면 true 아니면 false를 리턴합니다.
"abc","aabc","bc"가 있으면 aabc의 a를 bc의 붙이면 모든 문자열이 abc가 됨. 따라서 true를 리턴.
문제 처음 볼 때 단 한 번만 바꿀 수 있는 걸로 착각해서 문제 못풀었음.
친구랑 풀다가 여러 번 바꿀 수 있단 거 알고 다시 풀었음.
[나름대로 다른 방법으로 풀어본 코드]
import java.util.*;
class Solution {
public boolean makeEqual(String[] words) {
StringBuilder sb = new StringBuilder();
for (String str : words) {
//모든 문자열을 한 문자열로 만듬.
sb.append(str);
}
//문자열의 배열 길이로 총 글자가 나눠떨어지지 않으면 false.
//예를 들어 aabbc면 5글자인데 배열의 길이가 3개면 2,2,2로 나눌 수 없음.
if (sb.length() % words.length != 0) {
return false;
}
//문자의 정렬을 위해서 char 배열로 만든 후 정렬함.
String str = new String(sb);
char[] charArray = str.toCharArray();
Arrays.sort(charArray);
//문자열 배열의 길이를 주기로 체크함.
for (int startIndex = 0; startIndex < charArray.length; startIndex += words.length) {
if (charArray[startIndex] != charArray[startIndex + words.length-1]) {
return false;
}
}
return true;
}
}
위의 풀이법은 똑같은 문자가 words.length의 배수만큼 있어야 되는 거에 주목해서 풀었음.
"abc","aabc","bc"로 치면 a : 3, b : 3, c : 3 이렇게 나눠져야 하는 갯수의 배수만큼 있음.
[해쉬맵을 이용한 친구 코드]
import java.util.*;
class Solution {
public boolean makeEqual(String[] words) {
HashMap<Character, Integer> map = new HashMap<String, Integer>();
StringBuilder sb = new StringBuilder();
for(String word : words) {
sb.append(word);
}
if(sb.length() % words.length != 0) return false;
for(int i=0; i<sb.length(); i++) {
map.put(sb.charAt(i), map.getOrDefault(sb.charAt(i), 0)+1);
}
for(int val : map.values()) {
if(val % words.length != 0) return false;
}
return true;
}
}
프로그래머스에서 완주하지 못한 선수랑 비슷하게 풀었음.
Map에 key는 문자로 value는 그 문자의 개수를 넣어줌.
[리트코드 100%답안]
class Solution {
public boolean makeEqual(String[] words) {
int[] c = new int[26];
for (String word: words) {
for (char ch: word.toCharArray()) {
c[ch - 'a']++;
}
}
for (int frequency: c) {
if (frequency % words.length != 0)
return false;
}
return true;
}
}
알파벳의 숫자는 26개로 정해져 있으므로 그냥 알파벳 크기만한 배열을 생성해줌.
이 배열은 각 알파벳의 개수를 넣어줌.
728x90
반응형
'알고리즘 문제 풀이' 카테고리의 다른 글
1768. Merge Strings Alternately (0) | 2021.06.15 |
---|---|
1051. Height Checker (0) | 2021.06.15 |
완주하지 못한 선수 (0) | 2021.06.12 |
1431. Kids With the Greatest Number of Candies (0) | 2021.06.10 |
1827. Minimum Operations to Make the Array Increasing (0) | 2021.06.08 |