2023.05.08.MON

ronglong·2023년 5월 8일
0

[ 프로그래머스 ]

  • JadenCase 문자열 만들기
    : 정답률 77%. 테스트 케이스 8번을 계속 통과 못해서 힌트 봤는데, 마지막 문자가 공백인 경우도 고려해야했다.
    다른 사람 풀이 보니까, 아예 문자를 쪼갤 때 공백 기준이 아니라 ""로 모든 문자를 쪼갰음. 훨씬 나은 전략이다.
class Solution {
    public String solution(String s) {
        //주어진 문자열을 공백 기준으로 구분하기
        String[] arr = s.split(" ");

        for(int i=0; i<arr.length; i++){
            //공백 문자인 경우 거르기
            if(arr[i].equals("")||arr[i].equals("\\s")) continue;

            //문자를 첫 글자와 나머지로 나누기
            String head = arr[i].substring(0,1);
            String tail = arr[i].substring(1);

            //head는 모두 대문자로, tail은 모두 소문자로 변경
            if(!head.equals("[0-9]")) head = head.toUpperCase();
            tail = tail.toLowerCase();

            //head+tail 
            arr[i] = head + tail;
        }

        String answer = String.join(" ", arr); 
        //마지막 문자가 공백인 경우를 고려해야함. 
        if(s.endsWith(" ")) answer+=" ";

        return answer;
    }
}

[ 백준 ]

  • 2018번 수들의 합 5
    : 투 포인터 사용 문제. 교재 해설 참고함.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); //선언

        long n = Long.parseLong(br.readLine());

        int count = 1;
        int sum = 1;
        int startIdx = 1;
        int endIdx = 1;

        while(endIdx!=n){
            if(sum==n) {
                count++;
                endIdx++;
                sum += endIdx;
            }
            else if(sum > n){
                sum -= startIdx;
                startIdx++;
            }
            else if(sum < n){
                endIdx++;
                sum += endIdx;
            }
        }
        System.out.println(count);
    }
}
  • 1940번 주몽
    : 위의 문제를 토대로 스스로 풀었다! 굿굿,,
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); //선언

        //입력값 받기
        int n = Integer.parseInt(br.readLine());
        int m = Integer.parseInt(br.readLine());

        //숫자 배열에 넣고 정렬
        int[] nums = new int[n];
        StringTokenizer stringTokenizer = new StringTokenizer(br.readLine());
        for(int i=0; i<n; i++){
            nums[i] = Integer.parseInt(stringTokenizer.nextToken());
        }
        Arrays.sort(nums);

        //변수 초기화
        int count = 0;
        int startIdx = 0;
        int endIdx = n-1;

        //2개를 골랐을 때 m이 되는 경우의 수 구하기
        while(startIdx < endIdx){
            int sum = nums[startIdx] + nums[endIdx];
            if(sum == m) {
                count++;
                endIdx--;
                startIdx++;
            }
            else if(sum > m){
                endIdx--;
            }
            else if(sum < m){
                startIdx++;
            }
        }
        System.out.println(count);
    }
}

[ 혼공컴운 ]

Chapter 09. 운영체제 시작하기

  • 운영체제
    • 프로그램 실행을 돕는 프로그램
    • 핵심 서비스 : 자원 접근 및 할당, 파일 시스템 관리, 프로세스 관리
      • 일반적으로 하나의 CPU는 한 번에 하나의 프로세스 실행
    • 부팅시 메모리의 커널 영역에 적재(일반 응용 프로그램은 사용자 영역에 적재)
    • 커널 : 운영체제의 핵심 서비스를 담당
    • GUI, CLI같은 UI는 커널에 포함되지 않는(핵심이 아닌) 운영체제 제공 서비스
    • 이중모드 : CPU의 명령어 실행 모드 구분 (커널 모드, 사용자 모드)
      • 커널 모드에서만 운영체제 제공 서비스 이용 가능(커널 명령어 실행 가능)
      • 추가적인 모드가 존재. ex) 가상 머신을 위한 CPU 모드인 하이퍼바이저 모드
        -> 가상 머신에 설치된 운영체제로부터 운영체제 서비스 이용 가능
    • 시스템 호출(시스템 콜) : 사용자 모드에서 커널 모드로 전환하는 방법(인터럽트 방식. 소프트웨어 인터럽트)
      • 커널 영역 내에 인터럽트 서비스 루틴 존재

[ API 특강 ]

[ 느낀 점 ]

생각 많아 봤자 별 소용없다.
그냥 지금처럼 꾸준히 하자.
나름 꾸준히 하는 게 강점이니까...
화이팅⭐️

0개의 댓글