String s = "123444a";
int[] anagram = new int[256];
for(int i=0;i<s.length();i++){
anagram[s.charAt(i)]++;
}
for (int i : anagram) {
System.out.print(i + " ");
}
int 배열안에 들어가는 index가 int가 아니라 Char 이기 때문에
anagram[1] 여기에 값이 들어가는게 아니고
anagram['1'] 1인 Char 값이 들어가기 때문에 그 값에 맞는 index를 따라가는 것
같은 문자열인지 확인하는 문제
public class AnagramTest {
public static void main(String[] args) {
String ab = "abcd";
String ba = "badc";
int[] check = new int[256];
for(int i=0;i<ab.length();i++){
check[ab.charAt(i)]++;
}
int[] baChecking = new int[256];
for(int i=0;i<ab.length();i++){
baChecking[ba.charAt(i)]++;
}
if(Arrays.equals(check, baChecking)){
System.out.println("true");
}
}
}
true
두 배열에서 같은 숫자의 index를 반환
public class FindAnagramMapping {
public static void main(String[] args) {
int[] a = {11,27,1,324,12};
int[] b = {27,11,324,12,1};
int[] result = solution(a,b);
for (int i : result) {
System.out.print(i + " ");
}
}
private static int[] solution(int[] a, int[] b) {
int [] result = new int[a.length];
Map<Integer,Integer> map = new HashMap<>();
for(int i=0;i<a.length;i++){
map.put(b[i],i);
}
for(int i=0;i<a.length;i++){
result[i] = map.get(a[i]);
}
return result;
}
}
1 0 4 2 3
value,index
를 넣고, Map.get(value)
하면 index가 가져와 질 것public class ScratchPad {
public static void main(String[] args) {
String[] list = {"eat","tea","tan","ate","nat","bat"};
System.out.println(solution(list));
}
private static List<List<String>> solution(String[] list) {
/*
list -> char
char sorting
sorting 한 값이 같으면 추가
같은 값 = map
*/
Map<String,List<String>> map = new HashMap();
List<List<String>> result = new ArrayList<>();
for(String s : list){
char[] chars = s.toCharArray();
Arrays.sort(chars);
String sortingString = String.valueOf(chars);
System.out.println(sortingString);
System.out.println(" ==== ");
if(map.containsKey(sortingString)){
map.get(sortingString).add(sortingString);
}else{
List<String> stringList = new ArrayList<>();
stringList.add(s);
map.put(sortingString,stringList);
}
}
result.addAll(map.values());
return result;
}
}
[[eat, aet, aet], [bat], [tan, ant]]
함수 들어가기 전에 위처럼 주석 달아놓고 풀이 들어가는게 좋다
String sortingString = String.valueOf(chars);
이 부분에서 밑에처럼 잘못 생각할 수 있다.
String sortingString = Arrays.toString(chars);
// output : [a,e,t] , [a,n,t] ....
String sortingString = chars.toString();
// output : 주소값 ( @[C@27d6c5e0 )
Map<String,List<String>> map = new HashMap();
이거를 for loop 안에서 선언하는 실수를 했음
🔥 자꾸 기억에 의존해서 문제를 풀려고 한다. 나의 사고에 자신이 없기 때문. 그냥 내 생각대로 쭉 해봐도 된다.
두 번째로 큰 숫자?
public class KthLargestElementInAnArray {
public static void main(String[] args) {
Comparator<Integer> comp = (o1, o2) -> o1-o2;
int[] arrays = {4,2,1,5,7,10,232};
PriorityQueue<Integer> pq = new PriorityQueue<>(comp);
for (Integer i :arrays) {
pq.offer(i);
if(pq.size()>=3){
pq.poll();
}
}
System.out.println(pq.peek());
}
}
priority queue 의 comparator를 정의 해놓고, queue.size() 가 3이 넘어가면 poll을 해서 2개를 유지한다. 오름차순으로 정의해놨으므로
이런 식으로 존재할 것이다.
🎯 intput : "8F3Z-2e-9-wadwqdas"
🎯 output : 8F3-Z2E9-WADW-QDAS
String 추가할 때 StringBuilder를 활용하면 편하다.
추가는 append, 인덱스에 추가는 insert를 활용한다.
for(int i=k;i<length;i=i+k){
sb.insert(length-i,"-");
}
뒤에서부터 추가하는 for loop 아이디어
String str = "8F3Z-2e-9-wadwqdas";
int k=5;
String solution = solution(str, k);
System.out.println(solution);
}
private static String solution(String str, int k) {
StringBuilder sb = new StringBuilder();
String replace = str.replace("-", "");
String s = replace.toUpperCase();
int length = s.length();
for(int i=0;i<length;i++){
sb.append(s.charAt(i));
}
for(int i=k;i<length;i=i+k){
sb.insert(length-i,"-");
}
String s1 = String.valueOf(sb);
return s1;
}
🎯 input : int[] nums = {-2,1,-3,4,-1,2,1,-5,4};
🎯 output : 6
sum = Math.max(loop[i], sum+loop[i])
max = Math.max(max,sum)
sum = 현재의 최대치 계산
max = 지금까지의 최대치 저장
public class MaximumSubArray {
public static void main(String[] args) {
int[] nums = {-2,1,-3,4,-1,2,1,-5,4};
System.out.println(solution(nums));
}
public static int solution(int nums[]){
int newSum = nums[0];
int max = nums[0];
for(int i=1;i<nums.length;i++){
newSum = Math.max(nums[i],newSum+nums[i]);
max = Math.max(newSum,max);
}
return max;
}
}