240421

Regular Kim·2024년 4월 21일
0

회고

목록 보기
38/59

240421 회고 💬

금세 떨어진 벚꽃을 아쉬워하듯 진달래, 개나리가 만개했다. 피어난 꽃에 심술이 났는지 미세먼지가 심각했다. 다행히 금방 찾아온 비구름에 다 씻겨나가 선선한 주말을 보낼 수 있었다. 언뜻언뜻 꽃향기가 스치는 4월 3번째 주를 되돌아본다.

Keep 👍

  • 알고리즘 문제 풀이를 7일 연속으로 잘 해냈다. 원래 계획은 투포인터, 이분탐색 문제를 집중적으로 공략하기였다. 아직 수련이 부족해서 그런지 너무 어려웠다. 풀 수 있는 문제가 많지 않아서 BFS, 수학 주제 문제들로 화풀이했다.
    - 용액 합성하기 두 수를 더해서 차가 가장 작은 조합을 찾는 문제이다. 절댓값을 구해서 작은 수의 조합을 정답으로 출력하면 된다. 한참 고생하다가 힌트 보고 해결했다. 답은 단순한데 단순하게 접근하지 못했다.
    - 소수의 연속합 특정 수 n 이 주어졌을 때 그 수를 연속된 소수를 더해 만들 수 있는 경우의 수를 출력하는 문제다. 만약 5가 주어졌다면 2 + 3 과 5, 총 두 가지 경우의 수를 가진다. 골드 3 난이도이지만 소수판별 알고리즘을 알고 있다면 쉽게 해결할 수 있는 문제다.
  • 이번 주에는 가슴 운동을 했다. 🏋️ 가슴 운동이지만 팔에만 자극이 가는 헬린이이다.
  • 회사 스터디를 오랜만에 할 수 있었다. 몇 달 만에 해냈다. 다들 일정이 바빠 소홀해졌는데 다시 할 수 있었음에 다행이라 생각한다.
  • 아침 공부를 1번 할 수 있었다. 월요일 아침에 일찍 출근해서 개인 공부하는 시간을 가졌다.
  • 출퇴근 시간을 활용해서 자바 문법 복습을 하고 있다. 이번 주에는 중첩 클래스, 이너 클래스 내용을 공부했다.

Extras 😀

용액 합성하기


import java.io.*;
import java.util.*;

public class Main {

    public static void main(String[] args) {
        try (BufferedReader br = new BufferedReader(new InputStreamReader(System.in))) {

            Solution s = new Solution();
            System.out.println(s.solution(getInput(br)));

        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }

    private static int[] getInput(BufferedReader br) throws IOException {
        int len = Integer.parseInt(br.readLine());
        int[] arr = new int[len];
        StringTokenizer st = new StringTokenizer(br.readLine(), " ");
        for (int i = 0; i < arr.length; i++) {
            arr[i] = Integer.parseInt(st.nextToken());
        }
        return arr;
    }
}

class Solution{

    public int solution(int[] arr) {
        int answer = Integer.MAX_VALUE;
        int lp = 0;
        int rp = arr.length - 1;

        while (lp < rp) {
            if (Math.abs(answer) >= Math.abs(arr[lp] + arr[rp])) {
                answer = arr[lp] + arr[rp];
            }
            if(arr[lp] + arr[rp] < 0) lp++;
            else rp--;
        }
        return answer;
    }
}

소수의 연속합


import java.io.*;
import java.util.*;

public class Main {

    public static void main(String[] args) {
        try (BufferedReader br = new BufferedReader(new InputStreamReader(System.in))) {

            Solution s = new Solution();
            System.out.println(s.solution(getInput(br)));

        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }

    private static int getInput(BufferedReader br) throws IOException{
        return Integer.parseInt(br.readLine());
    }
}

class Solution{

    public int solution(int target) {
        if(target <= 1) return 0;

        Siever siever = new Siever(target);
        int[] field = siever.getPrimeNumbers();

        int answer = 0;
        int curValue = 0;

        int lp = 0;
        int rp = 0;

        while(lp <= rp && rp < field.length){
            if (curValue < target) {
                curValue += field[rp++];
            } else {
                curValue -= field[lp++];
            }
            if (curValue == target) {
                answer++;
                curValue -= field[lp++];
            }
        }

        while (lp < field.length) {
            if(curValue == target) answer++;
            curValue -= field[lp++];
        }

        return answer;
    }

    private class Siever{
        int target;
        boolean[] primeField;
        int numOfPrimeNumbers = 0;

        public Siever(int num){
            this.target = num;
            this.primeField = new boolean[num + 1];
            Arrays.fill(primeField, true);
        }

        public int[] getPrimeNumbers(){
            sieve();
            int[] primeNumbers = new int[this.numOfPrimeNumbers];
            int idx = 0;
            for (int i = 2; i < this.primeField.length; i++) {
                if (this.primeField[i]) {
                    primeNumbers[idx++] = i;
                }
            }
            return primeNumbers;
        }

        private void sieve(){
            for (int i = 2; i < this.primeField.length; i++) {
                if(this.primeField[i]){
                    this.numOfPrimeNumbers++;
                    for (int j = i + i; j < this.primeField.length; j += i) {
                        this.primeField[j] = false;
                    }
                }
            }
        }
    }
}
profile
What doesn't kill you, makes you stronger

0개의 댓글