PS, 그 머나먼 여정의 시작!

뿌엑·2022년 8월 16일
0

흔히 네카라...(넥타이?)로 시작하는 대기업에선 빡세게 코테를 본다고 한다.
그로서 수준 이하(...)의 지원자를 걸러내는 용도로 쓰는데..
본인도 그에 걸리는 수준 이하의 지원자 중 하나로서 수준을 조금이나마 향상시키고자 PS(Problem Solving)을 준비하는 것이다.

사이트는 boj를 이용 중이고, 현재 단계별 6계단까지 오른 ps 꼬꼬마!

보통 문제를 좀 풀었다 하려면 1000문제는 기본으로 깔고 가는 듯~

2000문제쯤 풀면 웬만한 알고리즘 테스트는 문제없이 통과할 수 있는 듯하다.

일단 boj의 단계별 ps 52단계를 거치고, 이후 대회 문제를 풀거나 사람들이 모아둔 문제집 세트를 푸는 식으로 알고리즘을 접근하면 효율적일 듯하다.

우선 기본 개념을 이해해야 하니!

단계별 문제는 개념의 이해와 구현 위주의 문제가 선정되어 있다.
일단 기초에 충실해야 응용도 할 수 있는 것이다.

아직 쪼렙이나 간단히 풀어본 코드 하나 올려본다ㅋㅋㅋㅋㅋ

같은 눈이 나온 주사위 개수에 따라 상금을 계산하는 문제이다.(올림피아드 '중등부' 1번ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ)

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.StringTokenizer;

class Ps18 {
	public void solution(int[] arr) {
		try {
			Map<Integer, Integer> m = new HashMap<>();
			int max = 0;		// 주사위 눈 최댓값
			int same = 0;		// 같은 주사위 눈 개수
			int sameNum = 0;	// 가장 중복된 개수가 많은 눈의 값
			int reward = 0;		// 상금
			
			// 주사위 개수 초기화
			m.put(1, 0);
			m.put(2, 0);
			m.put(3, 0);
			m.put(4, 0);
			m.put(5, 0);
			m.put(6, 0);
			
			
			for(int i = 0; i < arr.length; i++) {
				if(i == 0) max = arr[i];

				// 주사위 눈 중 최댓값 구하기
				if(max < arr[i]) {
					max = arr[i];
				}
				
				// 주사위 값 추가
				m.put(arr[i], (m.get(arr[i]) + 1));
			}
			
			// 가장 중복된 개수가 많은 눈의 값 구하기
			Iterator<Integer> keys = m.keySet().iterator();
			while(keys.hasNext()) {
				int key = keys.next();
				int value = m.get(key);
				
				if(same < value) {
					same = value;
					sameNum = key;
				}
			}
			
			// 상금 계산
			if(same == 3) {
				reward = 10000 + (sameNum * 1000);
			}else if(same == 2) {
				reward = 1000 + (sameNum * 100);
			}else if(same == 1){
				reward = max * 100;
			}
			
			System.out.println(reward);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

public class Main {
	public static void main(String[] args) {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		Ps18 p = new Ps18();
		
		String str1 = null;
		String str2 = null;
		String str3 = null;
		
		int num1 = 0;
		int num2 = 0;
		int num3 = 0;

		try {
			StringTokenizer stk = new StringTokenizer(br.readLine(), " ");
			
			str1 = stk.nextToken();
			str2 = stk.nextToken();
			str3 = stk.nextToken();
			
			num1 = Integer.parseInt(str1);
			num2 = Integer.parseInt(str2);
			num3 = Integer.parseInt(str3);
			
			int[] arr = {num1, num2, num3};
			
			p.solution(arr);
			
			br.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

중복된 눈을 어찌 구하나 살짝 고민했는데 단순히 map에 넣어 해결하면 간단했다.
언어에서 지원하는 자료구조를 이용하면 간단히 풀이가 도출되는 경우가 있는..!ㅋㅋㅋㅋ

보다 난이도 높은 문제를 풀게 되면 다시 글을 써볼 듯하다ㅋㅋ

0개의 댓글