일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- java
- ios
- 네이버
- codility
- 맥용
- code
- 안드로이드
- 맥북
- 구름TEST
- 구름알고리즘
- Swift
- 아이폰
- 코딩테스트
- iPhone
- 아이폰 해상도
- 알고리즘
- algorism
- Object-c
- 네이버알고리즘
- android
- Cordova
- 코딩
- 네이버구름
- goormtest
- naver
- 아이폰 비율
- objective-c
- 헬스
- codemonkey
- error
- Today
- Total
그래오늘은이거야
[Java]goorm test(구름TEST) 알고리즘 algorithm 가동 시간 예측하기 본문
[Java]goorm test(구름TEST) 알고리즘 algorithm 가동 시간 예측하기
jinhongstar 2019. 8. 30. 15:08안녕하세요 Leo 입니다.
이번 소개해줄 알고리즘 사이트는 구름TEST 라는 사이트 인데요,
NHN에서 투자 받아 개발한 알고리즘 사이트 입니다.
회사면접 코딩테스트를 하는 유명한 사이트죠...
저는 IOS (Object-c , Swift) 위주로 개발을 하고 가끔 안드로이드 개발을 하는데요...
회사에서 Java 로 코딩테스트를 하라고 해서 ... 하라면 해야죠... 풀어봤습니다.
제가 20문제 이상 푼것 같은데 이걸 공유 해드리도록 하죠...
이 글이 누군가에겐 "약"이 되고 누군가에겐 "독"이 될 것이다.
개발자라면 적어도 기본 알고리즘 정도는 스스로 학습하여 풀어봐야 한다.참고로 코딩테스트 문제를 제출 한 심사위원 분도제 블로그에서 답을 확인 한다는 것을 역으로 알아두고 보세요!! ㅎㅎ
알고리즘 문제
문제 : 많은 전기 시설을 사용하는 공장에서는 정전이 치명적이다. 그렇기에 대부분의 공장에서는 일시적인 정적에 대비할 시 있는 보조 전력 공급 시설을 설치한다. 많은 산업 현장에 공구를 납품하고 있는 구름공구에서는 두 개의 생산 라인을 운영하고 있다. 어느 날 공장에 일시적인 정전이 발생했으며, 두 개의 생산 라인은 임시 전력 저장장치와 보조 전력 공급 장치에 의존해 생산을 지속해나가야 하는 상황이다.
두 생산라인 A, B는 똑같은 구조의 시설이며 각각 임시 전력 저장 장치를 가지고 있다. 각 생산 라인은 현재 x%와 y%의 전력을 저장하고 있으며, 2%의 전력을 소모하여 한 시간동안 생산을 가동할 수 있다. 전력이 0%에 도달한 장치는 즉시 동작을 멈춘다.
구름공구에서는 보조 전력 공급 설비를 보유하고 있으며, 두 생산라인 중 한 곳에 전력을 공급할 수 있다. 전력공급은 한 시간 단위로만 공급하며 동시에 한 생산라인에만 전기를 공급할 수 있다. 보조 전력 공급 시설로 부터 전력을 공급 받는 생산라인은 한 시간에 3%의 전력이 충전된다. 결과적으로 한 시간에 1%의 전력이 상승하면서 동작하게 된다.
각 생산라인은 충전 시 일시적으로 전력 보유량이 100%를 초과할 수 있음에 유의하자. 두 시설의 현재 남은 전력량이 주어질 때, 하나의 보조 전력 공급 시설을 이용해 두 생산 라인을 동시에 가동할 수 있는 최대 시간을 계산하는 프로그램을 작성하시오. 보조 전력 공급 장치는 한 생산 라인에 한 시간 단위로 전력을 공급할 수 있으며, 전력을 공급하는 생산 라인을 변경하는데 소요되는 시간은 고려하지 않는다.
입력 형식
두 생산 라인의 잔여 전력 비율을 나타내는 100이하의 자연수 X, Y가 공백으로 구분되어 주어진다.
출력 형식
하나의 보조 전력 공급 시설을 이용해 두 개의 생산 라인을 동시에 가동할 수 있는 최대의 시간을 출력한다.
입/출력 예시
⋇ 입출력 형식을 잘 지켜주세요.
␣ : 공백
↵ : 줄바꿈
−⇥ : 탭
보기 입력 1
3 5
출력 1
6
보기 입력 2
4 4
출력 2
5
보기 입력 3
100 100
출력 3
197
== 개인추가
보기 입력 4
1 10
출력 4
9 <<< 추정 이것도 해보자!!
테스트
======================================================================================================
풀이
======================================================================================================
//Please don't change class name 'Main'
import java.util.Scanner;
/**
A,B의 생산라인이 있다.
각각의 생산라인에 x%, y% 두개의 전력을 저장 하고있다.
1. A B 생산라인
2. (x,y) 전력저장소
3. 구름공구 보조 전력공급 설비 / 두 생산라인중 한 곳만 공급가능
(한시간단위로 공급) A or B 중 하나만 공급 가능
1시간에 3% 전력 충전 / 1시간에 2% 전력사용 / 총 1% 전력상승
A or B 충전 시 전력 보유량 100% 넘을 수 있다.
A/B 남은 전력량을 입력할 것이다.
하나의 보조 전력 공급시설을 이용해 두 생산 라인을 동시에 가동 할 수있는 최대 시간!!
//문제 이해하는데 너무 오래 걸림.
// 겨우 이해해서 문제 풀이 완료 코드로 작성만하면됨.
(문제풀이)
번갈아 가면서 +1 , -2 (+1 = 충전) (-2 = 소비)
// 1시간
// 3 + 1 = 4
// 5 - 2 = 3
// 2시간
// 4 - 2 = 2
// 3 + 1 = 4
// 3시간
// 2 + 1 = 3
// 4 - 2 = 2
// 4시간
// 3 - 2 = 1
// 2 + 1 = 3
// 5시간
// 1 + 1 = 2
// 3 - 2 = 1
// 6시간
// 2 - 2 = 0
// 1 + 1 = 3
*/
//Please don't change class name 'Main'
import java.util.Scanner;
/**
A,B의 생산라인이 있다.
각각의 생산라인에 x%, y% 두개의 전력을 저장 하고있다.
1. A B 생산라인
2. (x,y) 전력저장소
3. 구름공구 보조 전력공급 설비 / 두 생산라인중 한 곳만 공급가능
(한시간단위로 공급) A or B 중 하나만 공급 가능
1시간에 3% 전력 충전 / 1시간에 2% 전력사용 / 총 1% 전력상승
A or B 충전 시 전력 보유량 100% 넘을 수 있다.
A/B 남은 전력량을 입력할 것이다.
하나의 보조 전력 공급시설을 이용해 두 생산 라인을 동시에 가동 할 수있는 최대 시간!!
//문제 이해하는데 너무 오래 걸림.
// 겨우 이해해서 문제 풀이 완료 코드로 작성만하면됨.
(문제풀이)
번갈아 가면서 +1 , -2 (+1 = 충전) (-2 = 소비)
// 1시간
// 3 + 1 = 4
// 5 - 2 = 3
// 2시간
// 4 - 2 = 2
// 3 + 1 = 4
// 3시간
// 2 + 1 = 3
// 4 - 2 = 2
// 4시간
// 3 - 2 = 1
// 2 + 1 = 3
// 5시간
// 1 + 1 = 2
// 3 - 2 = 1
// 6시간
// 2 - 2 = 0
// 1 + 1 = 3
*/
class Main {
// 번갈아 가면서 +1 , -2 (+1 = 충전) (-2 = 소비)
public static void main(String[] args) {
String activityData;
Scanner scan = new Scanner(System.in);
activityData = scan.nextLine();
String[] strArray = activityData.split(" ");
int factory_A = Integer.parseInt(strArray[0]);
int factory_B = Integer.parseInt(strArray[1]);
if(factory_A > 100 || factory_B > 100) return; //잔여 전력 비율을 나타내는 100이하의 자연수
int minFactory = 0;
int maxFactory = 0;
if(factory_A < factory_B){
minFactory = factory_A;
maxFactory = factory_B;
}else{
minFactory = factory_B;
maxFactory = factory_A;
}
int workTime = 0;
while(true){
workTime++;
//홀수 짝수 번갈아 가면서 작동해야함.
if(workTime%2 != 0){
//한시간씩 A 공장은 1시간 충전
//한시간씩 B 공장은 2시간 소비
minFactory = minFactory + 1;
maxFactory = maxFactory - 2;
if(minFactory == 0 || maxFactory == 0){
break;
}
}else{
//한시간씩 A 공장은 2시간 소비
//한시간씩 B 공장은 1시간 충전
minFactory = minFactory - 2;
maxFactory = maxFactory + 1;
if(maxFactory == 0 || minFactory == 0){
break;
}
}
System.out.println(workTime);
}
System.out.println(Integer.toString(workTime));
}
}
참고로 저는 알고리즘 풀이 점수는 높은 점수는 아닙니다.
일단 푸는 거에 집중했습니다. 알고리즘에 정답은 없습니다.
더 좋은 알고리즘을 만들어 내는게 목표 입니다.
알고리즘에 대하여 더 이야기 하실분은 댓글남겨주세요!
구름TEST 화면
구름테스트, 구름TEST 가 지원하는 프로그래밍 언어
그 외 Scala, Pascal, Lua, Objective-C, Rust, Cobol, Clojure, Smalltalk, Dart, Haskell, Perl, Common Lisp, D, Erlang 등
구름테스트, 구름TEST 를 2019년 현재 적용중인 회사
'세상 개발 > Java(SpringFramework)' 카테고리의 다른 글
[Java]goorm test(구름TEST) 알고리즘 algorithm 버스 추천하기 (0) | 2019.08.30 |
---|---|
[Java]goorm test(구름TEST) 알고리즘 algorithm 16진수 (2) | 2019.08.30 |
[Java]goorm test(구름TEST) 알고리즘 algorithm 알파벳 빈도 구하기 (0) | 2019.08.30 |
[Java]goorm test(구름TEST) 알고리즘 algorithm 공백 없애기 (0) | 2019.08.30 |
[Java]goorm test(구름TEST) 알고리즘 algorithm 약수 구하기 (0) | 2019.08.30 |