2024.05.23 ( Java )

changi123·2024년 5월 23일
0
post-thumbnail

1. 카드 정렬하기

Greedy (https://www.acmicpc.net/problem/1715 )

GitHub -> https://github.com/changi123/Algorithm-And-Data_structure/blob/main/Algorithm/src/problem_solving/greedy/BaekJoon_1715.java
  • 우선 순위 큐를 이용해서 최소값들 먼저 뽑아서 더해서 다시 넣으면 그에 맞는 순서대로 더할 수 있다. 기억★★★★★
package problem_solving.greedy;

import java.util.PriorityQueue;
import java.util.Scanner;

public class BaekJoon_1715 {

	static PriorityQueue<Integer> pq = new PriorityQueue<>();
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int n = Integer.parseInt(sc.next());
		for(int i= 0 ; i < n ; i++) {
			pq.offer(Integer.parseInt(sc.next()));
		}
		if( n ==1 ) {
			System.out.println(0);
			return ;
		}
		int priSum = 0 ;
		int answer =0 ; 
		int i = 0 ; 
		while(!pq.isEmpty()) {
			if( i>=2 ) {
				pq.offer(priSum);
				answer+=priSum;
				priSum = 0 ; 
				i= 0 ;
			}else {				
				priSum+=pq.poll();
				i++;
			}
			if( pq.size() == 0) {
				answer+=priSum;
				break;
			}
			
		}
		System.out.println(answer);

	}
	
}

2. 단어 수학

Greedy (https://www.acmicpc.net/problem/1339 )

GitHub -> https://github.com/changi123/Algorithm-And-Data_structure/blob/main/Algorithm/src/problem_solving/greedy/BaekJoon_1339.java
  • 알파벳 문제 나올 시 각 단어들의 가중치를 고려해보자
package problem_solving.greedy;

import java.util.Arrays;
import java.util.Collections;
import java.util.Scanner;

public class BaekJoon_1339 {

	public static void main(String[] args) {
		Scanner sc= new Scanner(System.in);
		int n = Integer.parseInt(sc.next());
		String [] arr= new String[n];
		for(int i = 0 ; i < arr.length;i++) {
			arr[i] = sc.next();
		}

		Integer[] alpha = new Integer[26];
		for(int i= 0 ; i < alpha.length;i++) {
			alpha[i] = 0;
		}
		for(int i= 0 ; i < arr.length ; i++) {
			int num = startNum(arr[i].length());
			for(int j = 0 ; j < arr[i].length();j++) {
				char c = arr[i].charAt(j);
				alpha[(int)c-65] += num ;
				num /= 10 ;

			}
		}

		Arrays.sort(alpha,Collections.reverseOrder());
		
		int sum = 0 ;
		int count = 9 ; 
		for(int i= 0 ; i < alpha.length;i++) {
			if( alpha[i] == 0 ) {
				break;
			}
			sum+=alpha[i]*(count--);
			
		}
		System.out.println(sum);

	}

	public static int startNum(int len) {
		int num = 1; 
		for(int i= 0 ; i < len-1 ; i++) {
			num = num*10;
		}
		return num;
	}


}

백준 레벨 변동

  • Gold 5 1% -> Gold 5 14%

풀이 유형

  • Greedy - 2문제
profile
개발자 홍찬기 꾸준한 사람이 되자

0개의 댓글

관련 채용 정보