[TIL 23.01.31~23.02.01] 2일간의 코딩 괴수와의 싸움

이승렬·2023년 2월 1일
0

항해99

목록 보기
21/34
post-thumbnail

2일동안은 진짜 코딩 괴물들과 싸웠던 날들이였던것 같다.
하루죙일 코딩문제랑 씨름하다 보니까 진짜 나중에는 문제가 나를 푸는건지, 내가 문제를 푸는 건지는 잘 모르겠다.

일단 오늘까지는 문제를 풀고, 정리를 하는 느낌으로 갈 것이고
내일은 문제 풀었던 것들을 싹다 모아서 어떠한 알고리즘을 썼는지 정리할 예정이다.
(사실 미뤄져서 이번주 WIL 이 될 수 있다.)

오늘 기술매니저님이 와서 갑작 테스트를 보았는데 여기에서 머리가 깨져버렸고
다시 공부를 집중해서 해야겠다는 생각이 들었다.

Q1. 정규식을 다뤄봤지만,, 많이쓰는 것은?

출처: 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 하고싶을때는 뒤에 + 를 붙이면 된다.

Q2. 문자열을 split 해서 ArrayList에 집어넣기

출처: 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));

Q3. String ArrayList 에서 문자열 제거하기

출처: 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]
        
    }
}
  • 다음과 같은 예제에서 문자열을 제거하는 것은 removeAll 을 하고 " " 을 null 로 바꿔주기만 하면 된다.

Q4. 10진수 숫자를 문자열 (n진수) 로 바꾸기

출처: https://dpdpwl.tistory.com/92

다음과 같다. 많이 쓰이지는 않으니 알아만 두자.

String binaryString = Integer.toBinaryString(i); //2진수
String octalString = Integer.toOctalString(i);   //8진수
String hexString = Integer.toHexString(i); 

Q5. HashMap 에서 value 값으로 key 값 찾기

출처: 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;
    }
  }
}

Q6. 배열에서 원소를 제거하고 싶을때 -> ArrayList로

보통 배열은 길이가 정해져 있고, 제거, 삽입이 어렵다.
따라서 이를 ArrayList 로 바꿔서 해결하면 훨씬 편하다.
Arrays.asList 를 통해서 바꿔주자

예시: https://developer-talk.tistory.com/708

Q7. Hashmap에서 대부분 안삭제하는 편이 좋을 듯하다.

삭제를 해버리면 key 값이 꼬여버린다.
어떤 식이냐면 key 값이 꼬인다는 말은 key를 도는 for 문에서 keyset()의 값이 계속해서 삭제가 되서 얘가 먹통이 나버린다.

최대한 삭제는 자제하자.

key값 삭제 참고; https://codechacha.com/ko/java-hashmap-remove/

Q8. HashMap getOrdefalut

-> 결론적으로 찾는 키가 존재한다면 찾는 키의 값을 반환하고, 없다면 기본값을 지정해줘서 그것을 반환한다.

이는 마라톤 문제에서 많이 사용이 된다고 한다.

예제: https://junghn.tistory.com/entry/JAVA-Map-getOrDefault-%EC%9D%B4%EB%9E%80-%EC%82%AC%EC%9A%A9%EB%B2%95-%EB%B0%8F-%EC%98%88%EC%A0%9C

마치며...

어제랑 오늘이랑 많은 문제를 푼 것 같은데, 호흡이 너무나도 길어서
정리할 수가 없었다.

내일은 시험이므로, 시험을 잘 보면서
언어스터디도 진행이 될 예정이니까, 이를 좀더 파고들면서
객체지향과, 람다스트림, 그 외의 것들도 잘 봐보자.

profile
Backend_Developer

0개의 댓글