본문 바로가기
수업 문제(국비 지원)/Java

[JAVA] 2022.09.15 - Collection 함수

by byeolsub 2023. 4. 29.

문제 : 
화면에서 여러개의 자연수를 입력받아(0을 입력시 입력종료) 이들 중 
홀수 인 자연수들만 이루어진 List 객체를 생성하고 
합을 구하고,홀수 중 최대값과 최소값을 찾는 프로그램을 작성하기
단 문자가 입력되면 무시한다.
홀수 들로만 이루어진 List 객체를 생성하여 출력하기
최대값과 최소값은
Collections.max(list)와 Collections.min(list) 함수를 이용한다
 7개의 자연수 : 12 77 38 41 53 92 85 aaa 인 경우
 77 41 53 85 만 홀수 이므로
 77+41+53+85 = 합 
 홀 수의 최대값 : 85
 홀 수의 최소값 : 41
 입력된 홀수 : [77,41,53,85]
package chap13;

import java.util.ArrayList;
import java.util.Collections;
import java.util.InputMismatchException;
import java.util.List;
import java.util.Scanner;

public class Test2 {
	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		System.out.println("자연수를 입력하세요.(0입력시 입력종료)");
	
		double sum=0;
		List<Integer> list = new ArrayList<Integer>();
		while(true) {
			try {
				Integer n = scan.nextInt();
				if(n.equals(0)) break;
					list.add(n);
					sum += n;
				if(n%2==0) {
					System.out.println(n+"홀수가 아닙니다.");
					list.remove(n);
				} 
			} catch (InputMismatchException e) {
				scan.next();
			}
		}
		System.out.println(list);
		System.out.println(list+"의 합 : "+sum);
		System.out.println("홀수의 최대값 : "+Collections.max(list));
		System.out.println("홀수의 최소값 : "+Collections.min(list));
		System.out.println("입력된 홀수 : "+list);
	}	
}

문제 : 
EastCard, CardDeck,Player를 이용하여 다음 구동 클래스를 완성하시오
  [결과]
  [1K,2,3K,4,5,6,7,8K,9,10,1,2,3,4,5,6,7,8,9,10]
  [6,7,5,4,5,8,9,10,2,3,10,4,1K,6,1,7,2,3K,9,8K]
  
  게임할 인원수를 입력하세요(최대:10)
  5
  1등:2번(5,4):9
  1등:4번(9,10):9
  3등:5번(2,3):5
  4등:1번(6,7):3
  5등:3번(5,8):3
 
package chap13;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.Map;
import java.util.Scanner;
import java.util.TreeMap;

public class Test3 {
	public static void main(String[] args) {
		CardDeck deck = new CardDeck();
		deck.shuffle();
		Scanner scan = new Scanner(System.in);
		int gameCnt = 0;
		while(gameCnt < 2 || gameCnt > 10) { 
			   System.out.println("게임할 인원수를 입력하세요(2~10)");
			   gameCnt = scan.nextInt();
		}   
		List<Player> list = new ArrayList<>();
		for(int i=0;i<gameCnt;i++) {
			list.add
			(new Player((i+1)+"번",deck.pick(),deck.pick()));
		}
// 		System.out.println("단순 등수 : ");
//		Collections.sort(list, (o1,o2)->o2.getScore() - o1.getScore());
//		System.out.println("등수:");
//		int i=0;
//		for(Player g : list) {
//		   System.out.println(++i + "등:" + g);
//		}
//		
		//Integer : Player의 점수값을 key
		//List<Player> : Player 목록
		//Comparator.reverseOrder() : 요소에 등록된 기본 정렬 방식의 역순
		//rank : 점수의 역순으로 정렬. 점수에 해당하는 Player 목록을 저장하는 Map객체
 		System.out.println("동점자 등수 : ");
		Map<Integer,List<Player>> rank = 
				               new TreeMap<>(Comparator.reverseOrder());
		for(Player g : list) {
			List<Player> eqrank = rank.get(g.getScore());
			//해당점수를 가진 Player가 없는 경우.키로 등록된 점수가 없다.
			if(eqrank == null) 
				eqrank = new ArrayList<>();
			eqrank.add(g); //eqraank : []
			rank.put(g.getScore(), eqrank); //수정
		}	
		int r = 0;
		//rank.values() : value 값들만 조회
		for(List<Player> l : rank.values()) {
			for(Player g : l) 	//[3번,4번]
				System.out.println((r+1) + "등:" + g);
			r += l.size();
		}		
	}
}