21년 1월 6일
한 일
-
백준 1009, 1076, 1052, 1757번 문제를 풀었다.
-
- (A * A) % N = ((A%N) * A) % N 이라는 간단한 공식을 이용해 풀 수 있는 문제였다.
- 다만, 더 속도를 빠르게 하려면, A % N = R 일 때, A^b % N = R^b % N 이라는 사실을 이용해야 한다.
-
-
간단한 HashMap을 이용하는 문제였다.
-
HashMap<String, Long> hm = new HashMap<>(); hm.getOrDefault("key", 0); hm.get("key"); hm.put("key", 1); hm.clear(); hm.containsKey("key"); for(Map.Entry<String, Long> entry : hm.entrySet()) { entry.getKey(); entry.getValue(); }
-
- 1052번
- 2진법 변환하는 과정과 매우 흡사한 과정을 통해 최소로 압축된 물병 갯수를 구할 수 있다.
- 복잡하게 생각하지 말고, 주어진 조건을 만족할 때까지, 구입할 물병 갯수를 1개씩 늘려가며 확인한다.
- 10757번
- A+B를 더하는 문제이지만, 0 < A,B < 10^10000 이라는 무지막지한 크기를 가진다.
- BigInteger를 사용해도 되지만 공부를 하기위해서 사용하지 않았다.
- 이전에 배운 전가산기 개념을 이용해 10진수 sum, carry를 구하는 함수를 구현한다.
- A와 B를 Int를 저장하는 배열이라고 생각하고 fulladder(전가산기)를 이용해 계산하면 된다. (나는 String으로 받아서 처리했다.)
-
-
프로그래머스 [완주하지 못한 선수], [전화번호 목록], [위장], [베스트앨범], [주식가격], [기능개발] 풀었다.
-
풀었던 문제들이지만 Java로 처음 풀어서 Java에 대한 공부가 되었다.
-
Comparator와 Comparable을 사용하여 Custom Sort를 할 수 있다.
String[] phone_book = new String[]{"123","1215","321","21","6662"}; List<String> phone_list = new ArrayList<>(Arrays.asList(phone_book)); Comparator<String> comp = new Comparator<String>() { @Override public int compare(String o1, String o2) { return o1.compareTo(o2); } }; Arrays.sort(phone_book, Collections.reverseOrder(comp)); Collections.sort(phone_list, Collections.reverseOrder(comp))
public class Custom implements Comparable<Custom> { @Override public int compareTo(Custom other) { //내가 other보다 우선순위가 높으면 음수, 같으면 0, 낮으면 양수 반환 return -1; } }
-
Java에서 제공하는 Queue와 Stack 사용법을 익혔다.
Stack<Integer> st = new Stack<>(); st.push(1); st.peek(); st.pop(); st.clear(); st.empty();
Queue<Integer> que = new LinkedList<>(); // enqueue que.add(1); //offer로 대체 가능, offer는 실패 시 false 반환, add는 exception // queue의 앞쪽 값 que.element(); //peek로 대체 가능, peek는 실패 시 false 반환, element는 exception // dequeue que.remove(); //poll로 대체 가능, poll은 실패 시 false 반환, remove는 exception que.clear(); que.isEmpty();
-
- TCP/IP 쉽게, 더 쉽게
- 12페이지까지 읽었다.
- 컴퓨터 네트워크의 종류, 네트워크 교환 방식(회선 교환 방식, 패킷 교환 방식), 서버와 클라이언트의 차이 등을 읽었다.
- 생각보다 입문자를 위한 내용 같아서 당황했지만, 알던 내용을 간략하게 훑고 가는 느낌이다.
- git에 있던 java application 프로젝트를 클론 후 intellij로 열면 빌드와 런이 안되는 문제가 발생했고 해결했다.
-
클론한 프로젝트를 open한다.
-
소스코드가 들어있는 폴더를 우클릭한 후 Mark Directory as -> Sources Root를 클릭한다.
잘못한 것
-
- 1052번 물병 문제에서, 너무 복잡하게 문제를 풀려다 시간만 날렸다.
- Bruth force 방식이 무식하다고 생각하여, Log로 나눈 후 1개로 줄일 수 있는 물병을 빼고, 이 과정을 반복하여 풀려고 했다.
- 제한 조건으로 시간복잡도를 계산해서 bruth force로 풀어도 되는지 확인하지 않았다.
잘한 것
- 힘들다고 내려놓지 않고, TCP/IP 쉽게, 더 쉽게 책을 읽었다.
- 엊그제와 어제 밀린 프로그래머스 문제를 포함하여 6문제를 풀었다.
느낌
- 뭔가 엄청난걸 하지 않아도, 목표한 바를 꾸준히 이뤄내는게 중요한 것 같다.
- 그림으로 배우는 TCP/IP책이 내용이 간단했지만, 피곤하다고 책을 펴지도 않은채 미루는 것과, 책을 펴서 10페이지라도 읽는 것은 성취감이 다르다.
할 일
- 프로그래머스 2문제 풀기
- TCP/IP 10쪽 읽기
- Java의 정석 완독하기 (구체적 계획을 세우자)