Hyogi's Notebook

SCPC 삼성전자 프로그래밍 경진대회 증강현실 배달 안경

by 효기’s

SCPC 삼성전자 프로그래밍 경진대회 문제 1번 "증강현실 배달 안경" 문제를 풀었습니다.

풀이과정이 틀렸을 수 도있고 대회에 직접적으로 참여한게 아니라서 코드 결과는 확인할 수 없지만

제가 풀었던 풀이과정을 공개하겠습니다.

 

※ SCPC 사이트에서 문제 공개는 하지않는것을 의무로 한다고해서 배포는 하지 않았습니다.


문제풀이 규칙 정리

1. 테스트케이스 출력 양식을 사용하여 4개의 케이스를 출력한다.

2. 정수형 변수 N, A, B 를 선언한다.

N은 사과의 총 개수,

A는 A바구니에 들어갈수 있는 총 사과개수,

B는 B바구니에 들어갈 수 있는 총 사과 개수이다.

3. 최소값 생성 (변수 A와 B를 비교해서 최소값을 출력하는 코드)

4. switch 문으로 각각의 case1,2,3,4를 구현한다.

5. switch 0 => 사과의 총개수와 최소값을 나눈 나머지가 비교할 대상인 A 개수보다 작아야한다.

이런 경우에서 나누기했을때 몫을 -1하여  나온값이 B의 사과개수 Bnum이 되고

Bnum값을 몫으로 하고 같은 조건으로 나누기한 나머지가 A의 num이 되며

Anum에 A를 나누기를 한 값이 최종 Anum의 값이 된다.

Bnum과 Anum의 합이 결과값의 출력이 되는것이다.

6. switch 1  A와 B가 바뀌어 있는경우는 N과 low의 나머지가 0인경우이므로 몫이 Anum이 되어 출력하면 된다.

7. switch 2  이 경우는 switch0과 같은 케이스인데 다만 A와 B가 바뀌었을 경우이다.

코드는 같으며 Anum과 Bnum의 위치만 바꿔주면 된다.

8. switch 3  N, A, B가 모두 같은 값일 경우는 조건을 N과 A가 같은 경우로 두고

num값에 N과 A를 나눈 몫을 결과값으로 주도록 했다. else에는 B와 나눈 몫을 반환하면된다.

 

package Samsung;

import java.util.Scanner;

class Solution {
	static int Answer;

	public static void main(String args[]) throws Exception {

		Scanner sc = new Scanner(System.in);

		int T = sc.nextInt(); // 테스트케이스 개수 출력

		for (int test_case = 0; test_case < T; test_case++) {

			int N = Integer.parseInt(sc.next()); // 사과의 총개수
			int A = Integer.parseInt(sc.next()); // A 바구니에 들어갈 수 있는 총 개수
			int B = Integer.parseInt(sc.next()); // B 바구니에 들어갈 수 있는 총 개수

			// 최소값 생성
			int low = 0;
			if (A < B) {
				low = A;
			} else {
				low = B;
			}

			switch (test_case) {
			////// case 1번 //////
			case 0:
				if ((N % low) < A) {
					int Bnum = ((N / low) - 1);
					int Anum = N - (low * Bnum); // 나머지값
					// Anum 개수 구하는방법
					if ((Anum % A) == 0) {
						Anum = Anum / A; // Anum깂
						Answer = Bnum + Anum; // 결과값 출력
					}
				}
				break;
			case 1:
				////// case 2번 //////
				if ((N % low) == 0) {
					int Anum = N / low;
					Answer = Anum;
				}
				break;
			case 2:
				////// case 3번 //////
				if ((N % low) < B) {
					int Anum = ((N / low) - 1); // 1
					int Bnum = N - (low * Anum);
					// Bnum 개수 구하는 방법
					if ((Bnum % B) == 0) {
						Bnum = Bnum / B;
						Answer = Anum + Bnum;
					}
				}
				break;
			case 3:
				////// case 4번 //////
				if (N == A) {
					int num = (N / A);
					Answer = num;
				} else {
					int num = (N / B);
					Answer = num;
				}
				break;
			}

			System.out.println("Case #" + (test_case + 1));
			System.out.println(Answer);
		}
	}
}

결과값

 

 

제가 코딩하면서 생각나는 반례는 생각나는대로 적용한거 같은데 틀린부분도 있을 수 있으니 잘 확인하셔야 합니다.

case별로 풀이과정을 노트에 적었습니다.

'Algoritum' 카테고리의 다른 글

JAVA Queue Stack Hash  (2) 2023.07.25
JAVA 이진탐색트리 AVL 자료구조  (4) 2023.07.24
JAVA Linkedlist 그림으로 원리 이해하기  (25) 2023.07.21
JAVA Linked List  (29) 2023.07.19
JAVA 시간복잡도와 정렬 출력프로그램  (22) 2023.07.17

블로그의 정보

감성 개발자 효기

효기’s

활동하기