/ CODINGTEST

inflearn강의 복습

뭔가 계속 불안해서 결국 인프런의 강의를 질렀다. 강의에서 나오는 내용들 위주로 공부를 진행하려고 한다.

String

사전지식

  1. charAt(i) => 문자열 위치(String “abcd”가 있으면 a는 charAt(1))
  2. toCharArray => char[]배열로 바꿔줌(위의 abcd를 배열로 바꿔줌)
  3. IndexOf(), substring(begin, end) (특정 문자를 찾고 싶을 때, end인덱스는 마지막에서 끊는다)
  4. startsWith(), endWith(), split() (ex. str.startWith(“a”)); => true, split() => 문자열을 특정 조건으로 스트링 배열로 바꿔줄 수 있음)
  5. toLowerCase() => 소문자로 바꿔줌
  6. replace() => 특정한 문자가 나오면 그거를 뭐로 바꿔줘라
  7. Character,isDigit(c), Character.isLetter (전자 => 0,1이런 숫자냐, 후자 => 문자이냐) –> true
  8. StringBuilder sb = new StringBuilder(); ex) sb.append(“aa”)

String 문제 1

1. Basic한 방법으로, 이메일이 담기는 배열을 파라미터로 받을 경우, for문을 돌려 각 이메일마다 charAt으로 나눠주고 조건을 확인시키는 방법이다. 여기서 주의할 점은 substring(숫자) 이 숫자 부분이 배열의 번호부터 출력이 된다. 2. split을 가지고 하는 방법으로, 각 조건마다 split으로 String 배열로 만들어주고 그 배열을 replace(".", "")로 바꿔주면 된다. 굉장히 간단했다.

1번 문제의 시간복잡도/공간복잡도 계산

1. 시간 복잡도 : 대상 => 문제에서 입력받은 파라미터 (속도) 2. 공간 복잡도 : 대상 => 실제 사용되는 저장 공간을 계산

참고

1. O(1): 스택, 큐, Map 2. O(N): for문 => 데이터를 한번씩 호출하기 때문 3. O(logN): sort, priorityQueue, binary Search Tree, Tree 4. O(KlogN): k번만큼 소팅하는 경우 5. O(N^2): 이중 for문 6. O(m*n): 이중 for문이지만, n이 다른 경우 bfs, dfs류

2. 보석 찾기 문제

Set은 대소문자를 구별한다. Set.contain(something) something이 Set에 들어있는지 확인 시켜줄 수 있다.(count를 할 때 유용할 듯)

3. 문자 파싱 문제

StringBuilder의 insert 메소드를 사용, (insert(8, "!"))이렇게 되어 있으면, 배열처럼 0번부터 시작해서 8번째에 해당 문자를 삽입한다. 삽입하고 딱 그자리에 들어가고 나머지는 밀리는 느낌이기 때문에, 잘 계산해서 사용하여야 겠다.

제일 중요한건, 사실 생각인 것 같다. 코딩테스트 문제를 풀어봐도 항상 나는 구현쪽에서 막힌다.(그만큼 아는게 적다는 뜻이겠지)
어지간하면 문제 이해는 어렵지 않다. 어떤 것을 사용할지도 머리에 떠오르지만 중간 중간 문제되는 부분들에 막히면서 코드가 복잡해진다.
아는 선에서 생각하고 바로 떠오르긴 하지만 그것이 제대로 된 접근이 아니기 때문에 문제 해결을 위하여 코드가 추가되다보니 복잡해지고 시간을 잡아 먹는 것 같다. 초반 스트링의 관한 문제들이기 때문에, 그렇게 어렵게 다가오지 않았다. 원래 목표는 dfs,bfs의 이해이기 때문에(찾아보니, 속도가 굉장히 느린데 왜 쓰는건지 궁금;;) 달려보자.