Information Security

그리디 본문

STUDY/Coding

그리디

sohexz 2021. 10. 6. 01:37

이것이 코딩테스트다-314p

처음에 생각한 방법

5 입력받기

5만큼 자리 있는 배열 생성 후 값 받아오기

배열에 있는 값 오름차순으로 정렬

값으로 만들 수 있는 금액 만들고 정렬

count로 1씩 추가해가면서 만들 수 있는 금액과 비교

 

*문제점: 경우의 수를 다 생각해야 됨, 비교를 하면 for문을 또 돌려야 하는데 값으로 만들 수 있는 금액과 그 금액을 1씩 더해가며 비교하는 것은 효율적이지 않음.

 

다시 생각한 방법

5 입력받기

5만큼 값 받아오기

값 오름차순 정렬

작은 것부터 더해가면서 count를 다음 값과 비교

 

n=int(input()) // 몇 개의 동전이 있는지 입력 받기
number=list(map(int,input().split())) //리스트에 화폐 단위 받아오기
number.sort() // 화폐 단위 받아온 리스트 오름차순으로 정렬

count=1 //화폐 단위 받아온 것 더해가며 1부터 비교

for x in number: // number 리스트에서 순차적으로 하나씩 값 빼오기
    if count < x: // count가 x보다 작은 경우 for문 탈출
        break
    count= count+ x // count가 x보다 같거나 큰 경우 count에 x값 더하면서 갱신

print(count) // count 출력

파이썬 공부 참고 블로그

https://blog.naver.com/wpghks7/221584113312

 

[파이썬으로 시작하는 삼성 SW역량테스트] - 1. 입력받기

알고리즘에 대해 본격적으로 진행하기 이전에 우선 입력을 어떻게 받는지에 대해 알아보도록 하겠다. C, ...

blog.naver.com

import java.util.*;

public class Greedy {

	public static void main(String[] args) {
		Scanner sc=new Scanner(System.in);
		int n=sc.nextInt();
		int[] number = new int[n];
		for(int i=0;i<number.length;i++)
			number[i]=sc.nextInt();
		
		Arrays.sort(number);
		
		int count=1;
		
		for(int j=0;j<n;j++) {
			if(count<number[j]) break;
			count+=number[j];
		}
		System.out.println(count);
	}
}

 

이것이 코딩테스트다-315p

 

같은 무게의 공이 여러 개 있을 수 있지만, 서로 다른 공으로 간주

(1,1), (2,2) 같은 것끼리 묶을 수 없음

(1,2), (2,1) 다른 걸로 보지 않음

 

생각한 방법

볼링공의 개수와 볼링공의 최대 무게 숫자 2개 받기

볼링공의 무게 list로 받기

for문을 돌면서 현재 공의 무게와 다른 무게면 count 1씩 올려주기

 

m,n = map(int,input().split())
number=list(map(int,input().split()))

count=0
for i in range(0,len(number)):
    for j in range(i,len(number)):
        if number[i] != number[j]:
            count+=1

print(count)

 

답안

n,m = map(int,input().split()) 
number=list(map(int,input().split()))

array=[0] *11 // 1부터 10까지 무게를 담을 수 있는 리스트

for x in number:
    array[x] += 1 // 각 무게의 해당하는 볼링공의 개수 카운트

result=0
for i in range(1,m+1): //1부터 m까지의 각 무게에 대하여
    n -= array[i]      //무게가 i인 볼링공의 개수(A가 선택할 수 있는 개수) 제외
    result += array[i] * n //B가 선택하는 경우의 수와 곱하기

print(result)

무게마다 볼링공이 몇 개 있는지 계산

카운트 된 배열을 각 무게에 대해서 

볼링공의 개수에서 무게가 i인 볼링공의 개수를 빼주고

A의 경우의 수를 뺀 n을 다음 사람이 선택하는 경우의 수와 곱해주는 계산을 반복

 

'STUDY > Coding' 카테고리의 다른 글

DFS/BFS  (0) 2021.11.03
구현  (0) 2021.10.12
부족할 금액 계산하기 - 위클리 챌린지 1주차  (0) 2021.08.13
서울에서 김서방 찾기  (0) 2021.08.08
두 정수 사이의 합  (0) 2021.07.27