2023.04.20.THU

ronglong·2023년 4월 20일
0

[ 프로그래머스 ]

  • 콜라츠 추측
    : 손 가는대로 풀지 말고, 수도코드 작성하는 습관을 들여야할 것 같다.
    안 그러면 이렇게 잡채 코드가 됨..
    다른 사람 풀이를 보고나니, 어차피 500번이 끝이라면 while 말고 for를 쓰는 게 깔끔했을 거라는 생각이 든다. 끝나는 횟수를 생각하면 좋을 것 같다.
class Solution {
    public int solution(int num) {
        long newNum = num;
        int count = 0;

        while(newNum>=1){
            if(newNum==1) return count;
            if(count==500) return -1;

            if(newNum%2==0) {
                newNum/=2;
                count++;
                continue;
            }
            else if(newNum%2==1) {
                newNum = (newNum*3)+1;
                count++;
                continue;
            }
        }
        return count;
    }
}
  • 서울에서 김서방 찾기
    : 백준 1377 풀면서 indexOf() 메서드 봤어서, 문제 보고 바로 적용 가능했다.
    배열에는 indexOf() 메서드가 없어서 리스트로 변환해야함.
    Arrays.asList(arr).indexOf("")
import java.util.*;
class Solution {
    public String solution(String[] seoul) {
        return "김서방은 "+Arrays.asList(seoul).indexOf("Kim")+"에 있다";
    }
}
  • 문자열 다루기 기본
    : 보자마자 떠오른 게 정규 표현식 사용하는 방법이었다.
    다른 사람 풀이 보니까, Integer.parseInt로 exception try~catch로 잡아서 확인하는 것도 있었음.
class Solution {
    public boolean solution(String s) {
        return s.matches("\\d\\d\\d\\d") || s.matches("\\d\\d\\d\\d\\d\\d");
    }
}
  • 행렬의 덧셈
class Solution {
    public int[][] solution(int[][] arr1, int[][] arr2) {
        int[][] answer = new int[arr1.length][arr1[0].length];

        for(int i=0; i<arr1.length; i++){
            for(int j=0; j<arr1[0].length; j++){
                answer[i][j] = arr1[i][j]+arr2[i][j];
            }
        }
        return answer;
    }
}
  • 직사각형 별찍기
    : 다음에는 StringBuilder 사용하자.
import java.util.Scanner;

class Solution {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int a = sc.nextInt();
        int b = sc.nextInt();

        String answer = "";

        for(int i=0; i<b; i++){
            for(int j=0; j<a; j++){
                answer += "*";
            }
            answer += "\n";
        }
        System.out.println(answer);
    }
}

[ 백준 ]

  • 1377번 버블소트
    : 도토리에게 힌트 받고 왼쪽으로 이동한만큼 인덱스 비교하는데 값이 제대로 안 나와서, 결국 검색해서 레퍼런스도 찾고, 레퍼런스 보고도 이해되지 않는 부분이 있어서(Comparator 처음 봄) chatGPT에게 문제 풀고 설명해달라고 시켰다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.Comparator;

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

        int[] arr = new int[number];
        int[][] numberAndIndex = new int[number][2];

        for (int i = 0; i < number; i++) {
            arr[i] = Integer.parseInt(br.readLine());
            numberAndIndex[i][0] = arr[i];
            numberAndIndex[i][1] = i;
        }

        Arrays.sort(numberAndIndex, new Comparator<int[]>() {
            @Override
            public int compare(int[] o1, int[] o2) {
                return o1[0]-o2[0];
            }
        });

        int max = 0;
        for(int i=0; i<number; i++){
            if(numberAndIndex[i][1]-i>max) max = numberAndIndex[i][1]-i;
        }

        System.out.println(max+1);
    }
}

[ 유어클래스 다시 읽기 ]

  • section1
    • 객체지향 프로그래밍 기초
      • 클래스 영역, 스택 영역, 힙 메모리 영역
      • 필드는 각 객체 내부, 메서드는 클래스 내부의 것 공유
      • 클래스 변수, 인스턴스 변수, 지역 변수(메서드 변수)
      • static
      • this : 인스턴스의 필드명과 지역변수를 구분

[ 느낀 점 ]

백준 1377 문제 못 풀고 혼자 분해서 프로그래머스 쉬운 문제 갈겨 풀기... 🤯🫠😇
지금껏 정답률 높은 순으로 풀어왔는데, 정답률 80%대의 간단한 문제들을 많이 푸는 건 별로 실력 향상에 도움이 되지 않는다는 생각이 들었다.
내일부터는 정답률 70%대, 60%대 문제들에 도전해봐야겠다.

구직도 해야하는데, 흠,, 4월은 좀 더 공부를 하며 습관을 들이고, 5월부터 넣어볼까도 싶다.

0개의 댓글