2일동안은 진짜 코딩 괴물들과 싸웠던 날들이였던것 같다.
하루죙일 코딩문제랑 씨름하다 보니까 진짜 나중에는 문제가 나를 푸는건지, 내가 문제를 푸는 건지는 잘 모르겠다.
일단 오늘까지는 문제를 풀고, 정리를 하는 느낌으로 갈 것이고
내일은 문제 풀었던 것들을 싹다 모아서 어떠한 알고리즘을 썼는지 정리할 예정이다.
(사실 미뤄져서 이번주 WIL 이 될 수 있다.)
오늘 기술매니저님이 와서 갑작 테스트를 보았는데 여기에서 머리가 깨져버렸고
다시 공부를 집중해서 해야겠다는 생각이 들었다.
출처: https://smartpro.tistory.com/10
일단 정규식을 카카오 코테 문제에서 풀어보았지만, 여기에서 쓰는 것 말고도 많이 쓰는 것은 유용하게 쓸 수 있을 것 같다.
예를 들어서 replaceAll 말고, spilit 에서도 정규식을 쓸 수 있따.
다음과 같이 숫자는 [0-9], 알파벳 대문자 같은 경우에는 [A-Z] 소문자 같은 경우는 [a-z] 이다.
이 예제를 보면 조금 더 이해가 쉬워질 것이다.
String str = "1aA2bB3cC";
String[] results = str.split("[0-9]");
for (int i = 0; i < results.length; i++) {
System.out.println("results[" +i + "] = " + results[i]);
}
// 출력
results[0] =
results[1] = aA
results[2] = bB
results[3] = c
첨언을 더 보태자면 위에 식에서 숫자 여러개, 문자 여러개를 한꺼번에 제끼거나, split 하고싶을때는 뒤에 + 를 붙이면 된다.
출처: https://smartpro.tistory.com/10
만약 다음과 같은 예제에서 "1,2,3" 이라는 String 을 문자열에 집어넣고 싶다고 하자.
그렇게 된다면 이때 배열에 , 도 같이 들어가는 대 참사가 이뤄 질 수 있다.
시퀀스는 다음과 같다. String-> 배열 -> ArrayList배열
생각해보았을때, String의 CharAt을 사용해서 할 수도 있을 것 같긴 하다.
String a = "1,2,3";
String [] items = a.split(",");
ArrayList <String> list = new ArrayList <String> (Arrays.asList(items));
출처: https://hianna.tistory.com/584
public class ListRemoveNull {
public static void main(String[] args) {
// List 준비
List<String> list = new ArrayList<String>();
list.add("A");
list.add(null);
list.add("");
list.add(null);
list.add("B");
// List 출력
System.out.println(list); // [A, null, , null, B]
// 공백, null 제거
list.removeAll(Arrays.asList("", null));
// 공백, null이 제거된 List 출력
System.out.println(list); // [A, B]
}
}
출처: https://dpdpwl.tistory.com/92
다음과 같다. 많이 쓰이지는 않으니 알아만 두자.
String binaryString = Integer.toBinaryString(i); //2진수
String octalString = Integer.toOctalString(i); //8진수
String hexString = Integer.toHexString(i);
출처: https://developer-talk.tistory.com/393
원래 key 값을 그냥 get을 통해서 value를 찾을 수 있지만,
반대의 경우는 가능하지 않다.
따라서 for문을 통해서 직접 찾아주는 방법이 있다. 다음과 같은 예시를 보자
public static void main(String[] args) {
String findKey = "";
Map<String, Integer> map = new HashMap<>();
map.put("John", 34);
map.put("Jane", 26);
map.put("Billy", null);
// 모든 키를 순회합니다.
for(String key : map.keySet()) {
// 키와 매핑된 값이랑 equals() 메서드에 전달된 값이랑 일치하면 반복문을 종료합니다.
if(map.get(key).equals(34)) { // 키가 null이면 NullPointerException 예외 발생
findKey = key;
break;
}
}
}
보통 배열은 길이가 정해져 있고, 제거, 삽입이 어렵다.
따라서 이를 ArrayList 로 바꿔서 해결하면 훨씬 편하다.
Arrays.asList 를 통해서 바꿔주자
예시: https://developer-talk.tistory.com/708
삭제를 해버리면 key 값이 꼬여버린다.
어떤 식이냐면 key 값이 꼬인다는 말은 key를 도는 for 문에서 keyset()의 값이 계속해서 삭제가 되서 얘가 먹통이 나버린다.
최대한 삭제는 자제하자.
key값 삭제 참고; https://codechacha.com/ko/java-hashmap-remove/
-> 결론적으로 찾는 키가 존재한다면 찾는 키의 값을 반환하고, 없다면 기본값을 지정해줘서 그것을 반환한다.
이는 마라톤 문제에서 많이 사용이 된다고 한다.
어제랑 오늘이랑 많은 문제를 푼 것 같은데, 호흡이 너무나도 길어서
정리할 수가 없었다.
내일은 시험이므로, 시험을 잘 보면서
언어스터디도 진행이 될 예정이니까, 이를 좀더 파고들면서
객체지향과, 람다스트림, 그 외의 것들도 잘 봐보자.