투케이2K

227. (java/자바) 알고리즘 : 모의고사 - for 문 동일 값 확인 , 스트림 stream 목록 반환 본문

Java

227. (java/자바) 알고리즘 : 모의고사 - for 문 동일 값 확인 , 스트림 stream 목록 반환

투케이2K 2021. 8. 6. 10:21

[개발 환경 설정]

개발 툴 : Eclipse

개발 언어 : Java


[소스 코드]

package ex6;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashSet;
import java.util.Iterator;

public class MainActivity7 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		System.out.println("[Program Start]");
		System.out.println("");
		
		/**
		 * [모의고사]
		 * 1. 수포자 삼인방은 모의고사에 수학 문제를 전부 찍으려 합니다
		 * 2. 1번 수포자가 찍는 방식 : 1, 2, 3, 4, 5 (반복) 
		 * 3. 2번 수포자가 찍는 방식 : 2, 1, 2, 3, 2, 4, 2, 5 (반복)
		 * 4. 3번 수포자가 찍는 방식 : 3, 3, 1, 1, 2, 2, 4, 4, 5, 5 (반복)
		 * 5. 1번 문제부터 마지막 문제까지 가장 많은 문제를 맞힌 사람이 누구인지 배열에 담아 return 하세요 
		 *    (단 , 가장 높은 점수를 받은 사람이 여럿일 경우, return하는 값을 오름차순 정렬해주세요)
		 * 6. 입출력 예시 : 
		 *    - answers = [1,2,3,4,5] / return = [1]
		 *    - answers = [1,3,2,4,2] / return = [1,2,3]
		 * 7. 프로그래머스 사이트 : https://programmers.co.kr/learn/courses/30/lessons/42840
		 * */
		
		// 초기 정답 배열 선언 실시
		//int ans[] = {1,2,3,4,5}; // [1번]
		int ans[] = {1,3,2,4,2}; // [2번]
				
		// 결과 확인 메소드 호출 실시
		System.out.println("결과 : " + Arrays.toString(solution(ans)));		

	}// 메인 종료
	
	public static int[] solution(int [] answers) {				
		// 인풋으로 들어온 데이터 확인 실시
		System.out.println("answers [정 답] : " + Arrays.toString(answers));
		System.out.println("");
		
		
		// 로직 처리 실시
		/**
		 * [세부 설명]
		 * 1. 1번, 2번, 3번 수포자들이 찍는 반복 방식을 배열에 선언합니다
		 * 2. for 문을 수행하면서 세명의 값을 비교하면서 카운트 값을 증가시킨후 >> ArrayList에 데이터를 삽입합니다
		 * 3. ArrayList 데이터를 정렬 후 >> 정답을 맞힌 사람과 데이터 비교 후 결과를 리턴합니다 
		 * */
		int one_answer[] = {1, 2, 3, 4, 5}; // 1번 수포자가 반복적으로 찍는 방식
		int two_answer[] = {2, 1, 2, 3, 2, 4, 2, 5}; // 2번 수포자가 반복적으로 찍는 방식
		int three_answer[] = {3, 3, 1, 1, 2, 2, 4, 4, 5, 5}; // 3번 수포자가 반복적으로 찍는 방식
		System.out.println("1번 수포자가 찍는 방식 : " + Arrays.toString(one_answer));
		System.out.println("2번 수포자가 찍는 방식 : " + Arrays.toString(two_answer));
		System.out.println("3번 수포자가 찍는 방식 : " + Arrays.toString(three_answer));
		System.out.println("");
				
		int people[] = new int[3]; //각 인원수에 맞게 정답 체크 배열 선언 실시
		for(int i=0; i<answers.length; i++) { // for 문을 수행하면서 정답 각 항목과 수포자들 각 항목 값이 일치하는지 확인
			if(answers[i] == one_answer[i]) people[0] ++; // 정답이랑 1번 수포자 정답이랑 같은 경우 카운트 증가
			if(answers[i] == two_answer[i]) people[1] ++; // 정답이랑 2번 수포자 정답이랑 같은 경우 카운트 증가
			if(answers[i] == three_answer[i]) people[2] ++; // 정답이랑 3번 수포자 정답이랑 같은 경우 카운트 증가
		}
		System.out.println("정답 개수 : " + Arrays.toString(people));		
		System.out.println("");
		
		
		// ArrayList 배열 선언  및 데이터 삽입 실시
		ArrayList <Integer> list = new ArrayList();		
		for (int j=0; j<people.length; j++) {
			/**
			 * 1. people 정답 맞힌 개수 배열에서 수포자 순서별로 정답개수가 저장되어있다
			 * 2. list에 삽입할때는 people 배열을 순차적으로 돌면서 확인을 수행
			 * 3. people 배열에 같은 값을 가진 사람이 있더라도 j + 1 값으로 순차적으로 저장됩니다
			 * */			
			if(people[j] != 0) list.add(j+1); // 정답 맞힌 개수가 0이 아닌것만 데이터 삽입
		}	
		
				
		// 결과 리턴 실시 [스트림 사용해 list 목록 반환]
		return list.stream().mapToInt(i->i.intValue()).toArray();		
	}

}// 클래스 종료

[결과 출력]


[요약 설명]

/**

* [모의고사]

* 1. 수포자 삼인방은 모의고사에 수학 문제를 전부 찍으려 합니다

* 2. 1번 수포자가 찍는 방식 : 1, 2, 3, 4, 5 (반복)

* 3. 2번 수포자가 찍는 방식 : 2, 1, 2, 3, 2, 4, 2, 5 (반복)

* 4. 3번 수포자가 찍는 방식 : 3, 3, 1, 1, 2, 2, 4, 4, 5, 5 (반복)

* 5. 1번 문제부터 마지막 문제까지 가장 많은 문제를 맞힌 사람이 누구인지 배열에 담아 return 하세요

*    (단 , 가장 높은 점수를 받은 사람이 여럿일 경우, return하는 값을 오름차순 정렬해주세요)

* 6. 입출력 예시 :

*    - answers = [1,2,3,4,5] / return = [1]

*    - answers = [1,3,2,4,2] / return = [1,2,3]

* 7. 프로그래머스 사이트 : https://programmers.co.kr/learn/courses/30/lessons/42840

* */


 

반응형
Comments