2023.06.13.TUE

ronglong·2023년 6월 13일
0

[ 백준 ]

  • 2252번 줄 세우기
    : 계속 메모리 초과 뜬다. 찾아봐도 이유 모르겠음,,
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.Queue;
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());

        //초기화
        ArrayList<Integer>[] A = new ArrayList[N + 1];
        int[] arr = new int[N + 1];

        for (int i = 0; i <= N; i++) {
            A[i] = new ArrayList();
        }

        for (int i = 0; i < M; i++) {
            stringTokenizer = new StringTokenizer(br.readLine());
            int S = Integer.parseInt(stringTokenizer.nextToken());
            int E = Integer.parseInt(stringTokenizer.nextToken());
            A[S].add(E);
            arr[E]++;
        }

        //위상 정렬 수행
        Queue<Integer> queue = new LinkedList<>();
        String answer = "";

        for (int i = 1; i <= N; i++) {
            if (arr[i] == 0) queue.add(i);
        }

        while (!queue.isEmpty()) {
            Integer now = queue.poll();
            answer += String.valueOf(now) + " ";
            for (int a : A[now]) {
                arr[a]--;
                if (arr[a] == 0) queue.add(a);
            }
        }
        System.out.println(answer);
    }
}

[ 프로그래머스 ]

  • 삼총사
class Solution {
    public int solution(int[] number) {
        int answer = 0;
        
        for(int i=0; i<number.length; i++){
            for(int j=i+1; j<number.length; j++){
                for(int k=j+1; k<number.length; k++){
                    if(number[i]+number[j]+number[k]==0) answer++;
                }
            }
        }
        
        return answer;
    }
}
  • 최소 직사각형
class Solution {
    public int solution(int[][] sizes) {
        //큰 수를 첫 번째 값으로 바꾸기.
        for(int i=0; i<sizes.length; i++){
            if(sizes[i][0] < sizes[i][1]){
                int temp = sizes[i][0];
                sizes[i][0] = sizes[i][1];
                sizes[i][1] = temp;
            }
        }
        
        //각각 최대값 찾아서 곱하기 
        int max1 = sizes[0][0];
        int max2 = sizes[0][1];
        for(int i=1; i<sizes.length; i++){
            if(max1 < sizes[i][0]) max1 = sizes[i][0];
            if(max2 < sizes[i][1]) max2 = sizes[i][1]; 
        }
        
        return max1*max2;
    }
}
  • 구명보트
    : 다른 사람 풀이 보니까, 한 사람이 타는 보트 수 - 두 사람이 타는 보트 수 로 간단히 풀 수 있다.
import java.util.*;

class Solution {
    public int solution(int[] people, int limit) {
        int answer = 0;

        //사람 정렬하기 
        Arrays.sort(people);

        //작은 사람과 큰 사람 합하기, 포인터 이용 
        int left = 0;
        int right = people.length-1;

        while(left <= right){
            //left==right
            if(left==right) {
                answer++;
                break;
            }

            //리밋 이하
            if(people[left]+people[right] <= limit){
                answer++;
                left++;
                right--;
            }

            //리밋 초과
            if(people[left]+people[right] > limit){
                answer++;
                right--;
            }
        }
        return answer;
    }
}

[ 느낀 점 ]

요즘 공부에 소홀했는데, 다시 시작!

0개의 댓글