2022년 정리1

조용휘·2023년 1월 22일
0

2022

목록 보기
1/10

1주차 precourse-onboarding

1번 포비와 크롱의 책 쟁탈전

첫 인상

  1. 코드를 보자마자 나오는 List 자료형에 제네릭스가 나왔다. 자료형 공부가 덜 됐다는 것을 느꼈다.
  2. 리턴이 int answer이다. List 자료형에서 값을 모두 구한 다음 answer에 넣어주면 되는 구조인 듯.
  3. 일단 메인 메소드가 눈에 보이지 않아 내가 어느정도 구현했는지 감이 안왔다. 테스트 코드의 중요성을 깨닫고 바로 만들고자 했다. → 했는데 test 클래스가 있었네?

공부

List 자료형 List (Java Platform SE 8 ) (oracle.com)

Array와 비슷하지만 사이즈를 정해주지 않아도 된다. 주로 제네릭을 통해 자료형을 선언해준다.

  1. 메소드 : add, get, remove

  2. [JAVA] - Arrays.asList()와 List.of()의 차이 (tistory.com)

    요약 : asList()와 of() 둘다 List 값에 대한 삽입, 삭제는 불가능.

    변경(set, replace) 여부 : asList()만 가능

    Null 허용 여부 : asList()만 가능, .of()는 NPE 유발.

int answer = Integer.*MAX_VALUE*;

처음에 이게 뭔가해서 구글링해봤다.

represents the maximum positive integer value that can be represented in 32 bits 라고 한다.

그냥 변수 초기 설정 문장이었다..

List → String : toString() 사용.

String → Int

https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/parseInt#설명

String을 다시 Int로 → parseInt()

https://www.javatpoint.com/java-string-to-int

아이디어

  1. 우선 예외 코드를 짜는 게 좋다고 생각했다. 일단 무엇을 짜든 제한 조건을 미리 구현하는 것이 좋다고 보기 때문.

→ Exception 클래스를 사용해보자.

  1. List 타입이므로 주어진 값을 1자리씩 띄어 인식해야 한다. 인덱스로만 하면 97 자체가 들어오기 때문.

→ 스트링으로 바꿔서 해보자

  1. 조건문을 통해 덧셈과 곱셈 연산을 한 left, right 값을 비교하여 큰 값을 고르고, 두 값을 비교하여 조건에 맞춰 return 해준다.

→ if else 문을 사용할까? switch를 사용할까? 무엇이 더 깔끔할까?

→ Class를 따로 만들어서 main 클래스를 더 깔끔하게?

2번

아이디어

  1. StringBuffer 사용? String을 Split해서?
  2. 이번엔 result로 반환하는 게 아닌 단순히 제한 사항이므로 예외 처리를 해주어야 하는 것 같다.

공부

StringBuffer

변경 작업이 많을 경우 사용. 그렇지 않으면 String을 사용하는 것이 좋다.

→ 이 문제는 값 변경이 잦으므로 StringBuffer를 사용해보자.

막상 해보고나니 깨달은 것. 배열은 삽입, 삭제가 불가능하다는 것.

→ List로 넘어가서 해보자.

String[]의 특이성

원래 배열 [] 형식은 List와 달리 그 크기를 정해주어야 하는데, String[]은 Array타입임에도 크기 선언에 영향을 받지 않는다. 좀 더 공부해보자.

예외처리 5. 자바 중급 활용-1 | 자바 Part-1 (dinfree.com)

Error는 크게 Compile Error와 Runtime Error로 나누어진다.

예외 상황 환경에서 동작하는 클래스를 만들때 해당 기능을 수행하는 메소드에 throws 구문을 추가하여 예외 상황 처리를 강제하게 한다.

사용자 정의 예외 클래스를 만드려면 Exception 클래스를 상속받아 구현하면 된다.

예외처리 유형은 크게 Checked Exception과 Unchecked Exception으로 나누어진다.

Checked Exception : Exception클래스를 상속받아 구현된 클래스(RuntimeException클래스 제외)

컴파일러에 의해 강제로 예외 처리가 요구된다.

Unchecked Exception : RuntimeException 클래스를 상속받아 구현된 클래스. 강제로 예외 처리가 요구되지는 않지만 필요에 따라 예외 처리 가능.

예외는 묶어서 표현 가능하지만 만약 부모 자식 관계라면 부모 클래스만 명시해 주어야 한다.

throws : 현재 메서드에서 ‘특정 예외 처리를 하지 않겠다’는 의미이다. 현재 메서드를 호출한 곳에서 해당 예외 클래스에 대한 처리(try ~ catch)를 해주어야 한다.

3번 369

Easy

4번 청개구리

아이디어

  1. 아스키코드 활용, 두 반대문자의 아스키값 합이 187.
  2. 그러면 Ascii ↔ String 의 관계에 대해 알아봐야 할듯.
  3. String 메소드중 .replace()

→ 굳이? 그냥 String + 메소드 사용하면 쉬울듯

5번 화폐 출금

공부

Collection (Java Platform SE 8 ) (oracle.com)

의도치 않게 Collection Framework에 대해 공부를 많이 했다..

잡담

5번까지 하면서 계속 느끼는 점 : 자료형만 알아도 참 문제들이 쉬울 것 같다.

자료형에 대해 아는 만큼 정말 많이 보이겠다는 생각을 했다.

Collections.emptyList(); 이게 자꾸 발목을 잡았다.

알고 보니 ‘예외 케이스를 처리할 때 빈 리스트를 반환하기 위해서 있는 것’ 라고 한다.

→ 바로 수정.. ArrayList로!

6번 닉네임 제한

첫인상

이거 카카오톡 공채 코딩 테스트에서 나온 거랑 비슷한 형태이다.

근데 어려워보인다.

아이디어

  1. 일단 이메일은 나중에 생각하자
  2. 닉네임 String을 split해서 접근할 것인가?
  3. 닉네임 String을 2개 단위로 끊어서 다른 닉네임과 비교할 것인가?

공부

HashSet ↔ ArrayList

https://kim6394.tistory.com/205

String에서 일부 문자열 출력 : substring

https://jamesdreaming.tistory.com/81

@email.com 형식 확인 : String Method → endsWith(String)

ArrayList 정렬 : Comparator.naturalOrder()

닉네임은 한글만 가능하게 … 문자 인코딩에 대하여

https://d2.naver.com/helloworld/19187

ASCII = American Standard Code for Information Interchange

가~힣까지 코드를 할당한다. 이를 컴퓨터가 인식할 수 있도록 8비트 단위 형태로 표현한 것이 인코딩이다. 조합형과 완성형으로 나눠져 있으며 완성형이 채택되었다.

  1. N바이트 조합형

    모든 자음과 모음에 영어와 특수기호를 매칭하고, ^N(Shift On)과 ^O(Shift Out)를 사용하여 한글 표현. 2~5바이트로 표현.

  2. 3바이트 조합형

    초,중,종성에 1바이트씩 할당. 중성, 종성이 없는 글자를 위해 fill code를 정의함. 3바이트로 표현.

  3. 7비트 완성형

    pass

  4. 2바이트 조합형

    2바이트 = 16비트 → 초.중.종성에 5비트씩 할당하고 첫 1비트는 1로 표시하여 한글임을 표시하는 방식이다.

  5. 2바이트 완성형

    완성된 음절을 코드와 일대일로 대응시키는 방식.

유니코드 인코딩 방식 :

한글 소리 마디 Ver

ex) 한글 → 한/글 → U+D55C / U+AE00 = 1101 0101 0101 1100 / 1010 1110 0000 0000

U+ D55C와 U+AE00은 코드 포인트 범위중 U+0800~U+FFFF에 속하므로

1110 xxxx 10xx xxxx 10xx xxxx로 인코딩.

→ (1110) 1101 (10)01 0101 (10)01 1100 / (1110) 1010 (10)11 1000 (10)00 0000

한글 완성형의 코드 범위는 U+AC00~U+D7AF이므로 무조건 3바이트 인코딩이다. 1110.10.10!

즉, 한글 완성형의 코드 범위를 2진수로 나타내면

U+AC00(가) / U+ D7AF(힣) = 1010 1100 0000 0000 / 1101 0111 1010 1111

→ (1110) 1010 . (10)11 0000 . (10)00 . 0000 / (1110) 1101 . (10)01 1110 . (10)10 1111

234 . 176 . 128 / 237 . 158 . 175 → 0xEA . 0xB0 . 0x80 / 0xED . 0x9E . 0xAF

U+AC00 + ((초성 값) x 21) + 중성 값) x 28 + 종성 값이 원하는 음절의 코드 포인트 값이다.

최종 결론 : 한글 완성형 범위는 44032~55203 / 자음모음 범위는 12593~12643

7번 SNS Algoritm

아이디어

  1. user의 친구 리스트를 만든다. → contains
    1. set으로 중복 제거
  2. 친구 리스트의 친구리스트를 만들어 +10 부여
    1. set으로 중복 제거 후 점수 부여
  3. visitor에 포함된 이름 갯수만큼 +1 부여
  4. 점수 리스트 Comparator.naturalSort 후 상위 5개 return.
  5. enum 사용? 혹은 값을 인덱스로 사용하는 방법?

공부

Map → Map.entry?

StringBuilder?

1주차 최종 회고록

  1. 예외 처리 메소드에 대해 exMsg 메소드만 사용했는데, 좀 더 다양한 메소드들을 공부해보자.
  2. 전체적인 코드의 흐름이 내가 짜는 흐름이 맞는 지 재고해보자.
    1. 접근 제어자를 적절하게 쓰고 있는지, static 등을 제대로 사용하고 있는지.
  3. SOLID원칙에 대해 더 공부해보자.
  4. 접근 제어자에 대해 더 공부해서 적용시켜보자.
  5. 객체지향 생활체조

1번

클래스 내 멤버변수는 private로 선언해보자.

maximum 찾는 메소드 사용.

class 내에 메소드들을 삽입. private로 선언. RestrictException은 공통 클래스

draw.io

ctrl + Alt + l = 줄 정렬

캠퍼스 핵데이 Java 코딩 컨벤션 (naver.github.io)

메소드에서 매개변수가 변환이 될 때는 return을 굳이 안해줘도 괜찮은 듯.

2번

Stringbuilder = 가변성

SOLID 원칙 중 D : 관계역전을 해도 유지되도록.

HashSet → Set<> = new HashSet;

3번

Collections.frequency

4번

String을 StringBuilder로 바꿔서 구현해보자 → 최적화

character는 연산 자체가 int로 가능하다.

ex) String은 ‘a’+’b’ = ‘ab’지만 char는 아스키숫자로 더해진다.

5번

나머지 연산은 계산 속도가 느리다.

차라리 비트연산자를 하는 게 빠름. 다음번에 한번 해보자.

Ctrl + Alt + v : 변수추출

Ctrl + Alt + m : 메소드추출

6번

정규식 사용법 공부해보기.

HashSet 이름 좀 더 알아볼 수 있게 바꾸자.

profile
Progress Gradually, Never Stop

0개의 댓글