2023.01.26.THU

ronglong·2023년 1월 26일
0
  1. 프로그래머스 0단계 문제 풀이
  • 직사각형 넓이 구하기
    - x,y 각각에서 가장 큰 수와 작은 수의 차이가 길이라는 점을 이용.
import java.util.*;

class Solution {
    public int solution(int[][] dots) {
        List<Integer> xlist = new ArrayList<>();
        List<Integer> ylist = new ArrayList<>();

        for(int i=0; i<dots.length; i++){
            xlist.add(dots[i][0]);
            ylist.add(dots[i][1]);
        }

        int x = Collections.max(xlist) - Collections.min(xlist);
        int y = Collections.max(ylist) - Collections.min(ylist);

        return x*y;
    }
}
  • 저주의 숫자 3
    - 처음에 for문으로 풀었는데 뭔가 카운팅이 제대로 안 되길래 while문으로 풀었더니 됐다.
    for문으로 풀었을 때 n이 반복되는 횟수, 즉 for문이 돌아가는 횟수를 i<=n;으로 했더니 안 맞아서 그런 거였다. 만약에 마지막 숫자에 3이 들어가거나 3의 배수면 다음 숫자로 계속 넘어가야하니까.
class Solution {
    public int solution(int n) {
        int i = 1;
        while(i<=n){
            if(i%3==0 || (i+"").contains("3")) n++;
            i++;
        }

        return n;
    }
}
  • 다항식 더하기
    - 마지막에 리턴문 나누는 부분에서 경우의 수 빼먹어서 조금 헤맸다.
class Solution {
    public String solution(String polynomial) {
        String[] arr = polynomial.split(" ");
        int x = 0;
        int num = 0;

        for(int i=0; i<arr.length; i++){
            if(arr[i].equals("+")) continue;
            else if(!arr[i].contains("x")) num += Integer.parseInt(arr[i]);

            else {
                if(arr[i].equals("x")) x++;
                else x += Integer.parseInt(arr[i].substring(0,arr[i].length()-1));
            }
        }

        if(x==0) return num+"";
        if(x==1 && num==0) return "x";
        if(x==1 && num!=0) return String.format("x + %d", num);
        if(num==0) return String.format("%dx", x);
        return String.format("%dx + %d", x, num);
    }
}
  • 다음에 올 숫자
    - 등비/등차 수열 원리를 그대로 구현하여 풀었음.
class Solution {
    public int solution(int[] common) {
        if(common[2]-common[1]==common[1]-common[0]) {
            return common[common.length-1]+(common[1]-common[0]);
            }
        else return common[common.length-1]*(common[1]/common[0]);
    }
}
  1. 리액티브 프로그래밍 (Reactive Programming)
  • 선언형 프로그래밍
  • 함수형 프로그래밍/람다와 연관되며, for, if 등을 직접 사용하여 코드 흐름이 위에서 아래로 진행되는 전통적인 방식의 명령형 프로그래밍과 대조.
  • Non-blocking 방식 : 요청 쓰레드를 차단하지 않음 --> 빠른 대응
  • 리액티브 스트림즈 (Reactive Streams)
    - 리액티브 프로그래밍의 표준 사양, 기술 명세
    • 컴포넌트 : Publisher,Subscriber, Subscription, Processor
    • 구현체 : Project Reactor, RxJava, Java Flow API 등

<느낀 점>
학습량이 밀당이 상당해서, 컨텐츠 분량이 상당히 들쑥날쑥인데,
어제는 좀 많았고(자정 넘어서까지 공부함,,), 오늘은 엄청 적었다.

많으면 많은대로 힘들어하고, 적으면 적은대로 집중력 떨어짐..ㅋㅋㅋㅋ
오늘은 그래서 공부하기 싫은 마음에, 알고리즘 문제를 4문제 풀었다.
공부하기 싫을 때 알고리즘 풀면 시간 진짜 잘 간다.

오늘은 리액티브 프로그래밍 워밍업이었고, 내일부터는 본격적으로 리액티브 스트림즈의 구현체인 프로젝트 리액터를 공부하기 시작할 것 같다.

자고 일어났더니, 어젯밤의 열정이 사라진 게 너무 우습다,,ㅎ
열공하고, 무엇보다도 존버/완주하자.

0개의 댓글