String a = "12345";
for(int i = 0; i < a.length(); i++){
int b = (int)a.charAt(i); //이건 틀렸음. 이렇게하면 1 = 49가 됨
// 숫자 char의 아스키코드값이 되기 때문
int c = (int)a.charAt(i) - 48; // 49-48 = 1 이 됨
}
혹은
int d = Integer.ParseInt(a); // 전체를 그냥 int로 바로 바꾸는 방법
2-1. String의 비교
String a = "123";
String b = "456";
Boolean c = false;
if(a.equals("123")) //equals 는 String 비교함수
c = true;
if(b.compareTo("456")) //compareTo 는 String 비교함수
c = true;
2-2. char의 비교
char a = '3';
Boolean b = false;
if(a == '3')
b = true
Sort가 가능한 자료구조는 array, ArrayList, Set, HashMap이 있다.
3-1. array Sort
// int[] 정렬
int[] intA = new int[10];
intA = {0,1,2,3,4,5,6,7,8,9};
Arrays.sort(intA);
Arrays.sort(intA, reverseOrder());
// String[] 정렬
//Stirng to String array
String[] stringA = new String[10];
String str = "0123456789"
stringA = str.split(""); //띄어쓰기 없이 ""로 split하면 그냥 char 한칸이 한자리가 됨
Arrays.sort(stringA);
Arrays.sort(stringA, Collections.reverseOrder());
3-2. ArrayList Sort
// Integer ArrayList 정렬
ArrayList<Integer> intAl = new ArrayList<Integer>();
// int[] to ArrayList 는 방법 x 반복문으로 넣어주기
for(int a: intA)
intAl.add(a);
Collections.sort(intAl); //ArrayList sort 내림차순
Collections.sort(intAl, Collections.reverseOrder()); //ArrayList sort 오름차순
// String ArrayList 정렬
ArrayList<String> stringAl = new ArrayList<String>();
Collections.sort(stringAl); //ArrayList sort 내림차순
Collections.sort(stringAl, Collections.reverseOrder()); //ArrayList sort 오름차순
3-3. Set Sort
Set를 ArrayList에 넣고 sort
3-4. HashMap Sort
Map도 ArrayList에 넣고 sort
Map<Integer, Double> hm = new HashMap<Integer, Double>();
hm에는
(1, 0.5)
(5, 0.6)
(3, 0.1)
(4, 0.9)
(2, 0.3)
ArrayList<Integer> keySet = new ArrayList<Integer>(hm.keySet());
//value 기준으로 오름차순한 후 key 순서
Collections.sort(keySet, (o1, o2)->(hm.get(o1).compareTo(hm.get(o2)) ); //오름차순
//key 기준으로 오름차순한 후 key 순서
Collections.sort(keySet); //오름차순
4-1. StringBuffer 선언
4-2. StringBuffer 함수
4.3. StringBuffer to String
StringBuffer sb = new StringBuffer(""); //로 초기화
sb.append("hello");
sb.append(" ");
sb.append("world");
String answer = sb.toString();
answer, sb는 hello world
String a = "12345";
String[] strA = new String[];
strA = a.split(""); // 띄어쓰기 없이 ""로 split하면 그냥 char 한칸이 한자리가 됨
String[] strA = ("1","2","34","5678"...);
String str = "";
str = strA.toString(); // str = 12345678...
import java.util.*;
class Solution {
public String solution(String X, String Y) {
String answer = "";
ArrayList<Character> xList = new ArrayList<>();
ArrayList<Character> yList = new ArrayList<>();
ArrayList<Character> jjkk = new ArrayList<>();
int intAnswer = 0;
for(int i = 0; i < X.length(); i++){
xList.add(X.charAt(i));
}
for(int i = 0; i < Y.length(); i++){
yList.add(Y.charAt(i));
}
boolean hasJJKK = false;
for(int i = 0; i< xList.size(); i++){
if (yList.contains(xList.get(i))){
hasJJKK = true;
jjkk.add(xList.get(i));
yList.remove(yList.indexOf(xList.get(i)));
}
}
if(!hasJJKK) intAnswer = -1;
else{
Collections.sort(jjkk, Collections.reverseOrder());
for(int i = jjkk.size() - 1, j = 0; i >= 0; i--, j++){
// System.out.println(jjkk.get(j));
intAnswer += (int)jjkk.get(j) * Math.pow(10, i);
}
}
answer = intAnswer + "";
return answer;
}
}
-> 오.. 대박 character '5'를 int로 강제변환하면 5가 아니라 아스키코드 5인 53이 나옴
-> 그 부분 고쳤지만 틀렸다.
import java.util.*;
import java.math.*;
class Solution {
public String solution(String X, String Y) {
String answer = "";
StringBuffer sb = new StringBuffer("");
int[] count = new int[10];
for(int i = 0; i < X.length(); i++){
count[X.charAt(i)-48]++;
}
Boolean haveJG = false;
for(int i = 0; i < Y.length(); i++){
if(count[Y.charAt(i)-48] != 0){
count[Y.charAt(i)-48]--;
haveJG = true;
sb.append(Y.charAt(i));
}
}
String[] str = sb.toString().split("");
Arrays.sort(str, Collections.reverseOrder());
sb = new StringBuffer("");
for(int i = 0; i < str.length; i++){
sb.append(str[i]);
}
answer = sb.toString();
if(!haveJG) answer = "-1";
else{
if(answer.charAt(0) == '0') answer = "0";
}
return answer;
}
}
-> 1차시도에서는 시간복잡도가 X * Y 였는데, 2차시도에서는 Y로 줄었다. 이번 알고리즘은 1차에서 HashMap으로 바꿔야하나 고민하다가 array로 가능하다는 정답을 보고 참고해서 짰다.
왜 array 방법을 생각못했지?? 그리고 String으로 출력하는데 왜 계산을 하고있냐고!
-> 이번에 찾아보면서 알게된 사실이 정말 많아서 모조리 정리해주겠어..