[이것이 코딩테스트다] 2. 그리디(Greedy) 알고리즘

2021. 12. 13. 01:26· Algorithm
반응형

이것이 취업을 위한 코딩테스트다

 

이 포스팅에서 작성하는 내용은 이것이 취업을 위한 코딩테스트다 (나동빈 지음) 에서 발췌하였습니다.

 

그리디(Greedy) : 현재 상황에서 당장 좋은 것만 고르는 알고리즘.

ex) 거스름돈 알고리즘 - 동전을 가장 적게 주는 문제

 

 

그리디 관련 예제 소스(java로 작성)

아래의 소스들은 제가 공부하면서 작성한 코드이기에 참고용으로만 봐주시면 감사하겠습니다.

 

- 큰 수의 법칙

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{
		// TODO Auto-generated method stub
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		String a= br.readLine();
		String b= br.readLine();
		
		StringTokenizer st = new StringTokenizer(a);
		
		int N = Integer.parseInt(st.nextToken());
		int M = Integer.parseInt(st.nextToken());
		int K = Integer.parseInt(st.nextToken());
		
		StringTokenizer st2 = new StringTokenizer(b);
		int[] arr = new int[N];
		
		for(int i =0; i<N ; i++) {
			int num = Integer.parseInt(st2.nextToken());
			
			arr[i]=num;
		}
		// 반복되는 묶음 : (M / (K+1))
		// 가장 큰 수가 나오는 횟수 : 반복되는 묶음 * K + 나머지
		// 마지막에 묶음이 아닌 나머지들 : (M % K+1)
		// 두번 째로 큰 수가 나오는 횟수 : M - 가장 큰 수가 나오는 횟수
		
		Arrays.sort(arr); // 입력 받은 수들 정렬하기
        int big1 = arr[N - 1]; // 가장 큰 수
        int big2 = arr[N - 2]; // 두 번째로 큰 수
        
		int count = (M / (K+1)) * K;
		count += (M % (K+1));
		
		int result = 0;
		result = big1 * count;
		result += big2 * (M-count);
		
		System.out.println(result);
		
	}

}

 

 

- 숫자 카드 게임

import java.util.Arrays;
import java.util.Scanner;
import java.util.StringTokenizer;

public class Main {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner sc = new Scanner(System.in);
		
		String str1 = sc.nextLine();
		StringTokenizer st1 = new StringTokenizer(str1);
		
		int n = Integer.parseInt(st1.nextToken());
		int m = Integer.parseInt(st1.nextToken());
		
		int[] arr = new int[m];
		
		int big = 0;
		
		for (int i = 0; i<n; i++) {
			String str2 = sc.nextLine();
			
			StringTokenizer st2 = new StringTokenizer(str2);
			for(int j=0;j<m;j++){
				arr[j] = Integer.parseInt(st2.nextToken());
			}
			
			Arrays.sort(arr);
			
			if(arr[0]>=big) {
				big=arr[0];
			}
		}
		
		System.out.println(big);
		
	}

}

 

- 1이 될 때까지

import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner sc = new Scanner(System.in);
		
		int N = sc.nextInt();
		int K = sc.nextInt();
		int count = 0;
		
		while(true) {
			count++;
			if(N % K == 0) {
				N /= K;
			}else {
				N--;
			}
			
			if(N == 1) {
				break;
			}
		}
		
		System.out.println(count);
	}

}

 

 

반응형

'Algorithm' 카테고리의 다른 글

[이것이 코딩테스트다] 4. DFS/BFS - Stack, Queue, 재귀함수  (0) 2021.12.24
[BAEKJOON] 2869번 : 달팽이는 올라가고 싶다  (0) 2021.12.22
[BAEKJOON] 1439번 : 뒤집기  (0) 2021.12.12
[BAEKJOON] 2292번 : 벌집  (0) 2021.12.09
[BAEKJOON] 1712번 : 손익분기점  (0) 2021.12.06
'Algorithm' 카테고리의 다른 글
  • [이것이 코딩테스트다] 4. DFS/BFS - Stack, Queue, 재귀함수
  • [BAEKJOON] 2869번 : 달팽이는 올라가고 싶다
  • [BAEKJOON] 1439번 : 뒤집기
  • [BAEKJOON] 2292번 : 벌집
멍목
멍목
개발 관련 새롭게 알게 된 지식이나 좋은 정보들을 메모하는 공간입니다.
반응형
멍목
김멍목의 개발블로그
멍목
전체
오늘
어제
  • 분류 전체보기 (514)
    • BE (190)
      • Spring (21)
      • Java (141)
      • Kotlin (6)
      • JPA (22)
    • FE (33)
      • Javascript (16)
      • Typescript (0)
      • React (5)
      • Vue.js (9)
      • JSP & JSTL (3)
    • DB (32)
      • Oracle (22)
      • MongoDB (10)
    • Algorithm (195)
    • Linux (8)
    • Git (6)
    • etc (42)
    • ---------------------------.. (0)
    • 회계 (4)
      • 전산회계 2급 (4)
    • 잡동사니 (2)

블로그 메뉴

  • 홈
  • 관리

공지사항

인기 글

태그

  • 자바 테스팅 프레임워크
  • 이펙티브 자바
  • MongoDB 공부
  • 자기 공부
  • 이펙티브자바
  • 자기개발
  • Oracle
  • 자기공부
  • 코테 공부
  • 전산회계 2급 준비
  • junit5
  • java 8
  • 자기 개발
  • 코테공부
  • 알고리즘공부
  • Effective Java
  • vue3 공부
  • 더 자바 Java 8
  • 자바 공부
  • 자바공부
  • JPA
  • Java to Kotlin
  • 더 자바 애플리케이션을 테스트하는 다양한 방법
  • JPA 공부
  • 알고리즘 공부
  • MongoDB with Node.js
  • MongoDB 기초부터 실무까지
  • 코틀린
  • 자바 개발자를 위한 코틀린 입문
  • 프로젝트로 배우는 Vue.js 3

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.0
멍목
[이것이 코딩테스트다] 2. 그리디(Greedy) 알고리즘
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.