2023.05.06.SAT

ronglong·2023년 5월 6일
0

[ 프로그래머스 ]

  • 음양 더하기
    : 정답률 84%
class Solution {
    public int solution(int[] absolutes, boolean[] signs) {
        //부호에 따라 값을 더하고 뺀다. 
        int answer = 0;

        for(int i=0; i<signs.length; i++){
            if(signs[i]) answer += absolutes[i];
            else answer -= absolutes[i];
        }

        return answer;
    }
}
  • 최댓값과 최솟값
    : 정답률 79%
import java.util.*;

class Solution {
    public String solution(String s) {
        //공백으로 쪼개고, 숫자로 바꾼 후, 최대 최소값을 찾는다. 
        String[] arr = s.split(" ");

        int[] numbers = new int[arr.length];

        for(int i=0; i<arr.length; i++){
            numbers[i] = Integer.parseInt(arr[i]);
        }

        Arrays.sort(numbers);

        return numbers[0] + " " + numbers[numbers.length-1];
    }
}
  • 부족한 금액 계산하기
    : 정답률 80%. 처음에 몇 개 테스트 실패하길래, 값 보고 오버플로우인 것 같아서 money 타입만 long으로 바꿔서 통과했다. 따로 변수 선언하긴 귀찮았음.
class Solution {
    public long solution(int price, long money, int count) {
        //count만큼 이용했을 때, 부족한 이용료를 구하기 
        for(int i=1; i<=count; i++){
            money -= i*price;
        }
        return money >= 0? 0 : money*(-1); 
    }
}

[ 백준 ]

  • 11660번 구간 합 구하기 5
    : 저 점화식 같이 생긴 걸 구하질 못했다. 풀이 보고 이해함. 그림 그리면서 풀어보는 걸 연습해봐야겠다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

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

        //표 크기, 계산 횟수 받기
        StringTokenizer stringTokenizer = new StringTokenizer(br.readLine());
        int n = Integer.parseInt(stringTokenizer.nextToken());
        int m = Integer.parseInt(stringTokenizer.nextToken());

        //이차원 배열 만들기
        int[][] matrix = new int[n+1][n+1];
        for(int i=1; i<=n; i++){
            stringTokenizer = new StringTokenizer(br.readLine());
            for(int j=1; j<=n; j++){
                matrix[i][j] = Integer.parseInt(stringTokenizer.nextToken());
            }
        }

        //합 배열 만들기 for 구간 합
        int[][] sum = new int[n+1][n+1];
        for(int i=1; i<=n; i++){
            for(int j=1; j<=n; j++){
                sum[i][j] = sum[i][j-1] + sum[i-1][j] - sum[i-1][j-1] + matrix[i][j];
            }
        }

        //정답 배열 만들기
        int[] answer = new int[m];

        for(int i=0; i<m; i++){
            stringTokenizer = new StringTokenizer(br.readLine());
            int x1 = Integer.parseInt(stringTokenizer.nextToken());
            int y1 = Integer.parseInt(stringTokenizer.nextToken());
            int x2 = Integer.parseInt(stringTokenizer.nextToken());
            int y2 = Integer.parseInt(stringTokenizer.nextToken());
            answer[i] = sum[x2][y2] - sum[x1-1][y2] - sum[x2][y1-1] + sum[x1-1][y1-1];
        }

        for(int a : answer){
            System.out.println(a);
        }
    }
}

[ 자료구조 & 알고리즘 ]

  • 합 배열 : 인덱스 0~i 까지의 합을 구한 배열 -> 구간 합 구하기에 이용.

[ 느낀 점 ]

오늘도 코테 봤다.
준비가 되지 않은 상태에서 시험 계속 들이붓기,,★

4문제 중에 한 문제 풀었다.
나머지 3개 중에 하나는 아예 못 풀었고, 두 개는 풀다가 실패.

하나는 수도 코드 작성도 다 하고, 재귀를 사용하는 한 가지 경우만 구현하면 끝나는 거였는데, 재귀를 어떻게 구현해야할지 여전히 모르겠다.

<알고리즘 코딩테스트 자바> 를 띄엄띄엄 보려고 했는데, 처음부터 정독해야겠다.
기초가 부족한 것 같아서...
코테... 대체 언제쯤 감 잡을 수 있는거죠..😇🔫

0개의 댓글