일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- android
- 네이버알고리즘
- 코딩
- algorism
- Swift
- 맥북
- 안드로이드
- ios
- 헬스
- codemonkey
- codility
- 네이버
- Object-c
- 구름TEST
- 구름알고리즘
- java
- goormtest
- naver
- 맥용
- 아이폰 비율
- Cordova
- 코딩테스트
- 네이버구름
- 아이폰
- error
- 아이폰 해상도
- code
- 알고리즘
- objective-c
- iPhone
- Today
- Total
그래오늘은이거야
[Java]goorm test(구름TEST) 알고리즘 algorithm 큐(Queue) 본문
[Java]goorm test(구름TEST) 알고리즘 algorithm 큐(Queue)
jinhongstar 2019. 8. 30. 14:52안녕하세요 Leo 입니다.
이번 소개해줄 알고리즘 사이트는 구름TEST 라는 사이트 인데요,
NHN에서 투자 받아 개발한 알고리즘 사이트 입니다.
회사면접 코딩테스트를 하는 유명한 사이트죠...
저는 IOS (Object-c , Swift) 위주로 개발을 하고 가끔 안드로이드 개발을 하는데요...
회사에서 Java 로 코딩테스트를 하라고 해서 ... 하라면 해야죠... 풀어봤습니다.
제가 20문제 이상 푼것 같은데 이걸 공유 해드리도록 하죠...
이 글이 누군가에겐 "약"이 되고 누군가에겐 "독"이 될 것이다.
개발자라면 적어도 기본 알고리즘 정도는 스스로 학습하여 풀어봐야 한다.참고로 코딩테스트 문제를 제출 한 심사위원 분도제 블로그에서 답을 확인 한다는 것을 역으로 알아두고 보세요!! ㅎㅎ
알고리즘 문제
문제 : 큐는 먼저 집어 넣은 데이터가 먼저 나오는 FIFO (First In First Out)구조로 저장하는 형식을 말합니다.
나중에 집어 넣은 데이터가 먼저 나오는 스택과는 반대되는 개념입니다.
EnQueue(입력), DeQueue(출력) 를 통해 자료 입출력이 구현됩니다.
큐가 꽉 차서 더 이상 자료를 넣을 수 없는 경우를 Overflow, 큐가 비어 있어 자료를 꺼낼 수 없는 경우를 Underflow라고 합니다.
이번 문제를 큐의 기본 동작과 관련된 문제입니다. 아래의 입력/출력 조건에 맞게 프로그램을 작성하세요.
*큐는 최대 10개의 자료가 들어갈 수 있고, 10개를 넘으면 overflow를 출력합니다.
*큐가 비어있는 상태에서 Dequeue을 실행하면 underflow를 출력합니다.
*프로그래밍 언어에서 제공하는 라이브러리를 사용하지 않고 문제를 해결하는 것을 권장합니다.
입력
첫 줄에 입출력의 횟수를 입력합니다.
다음 줄부터 입력 또는 출력 여부(d 또는 D)를 입력하고 입력(e 또는 E)일 경우는 자료 내용까지 입력합니다.
* e(E) 또는 d(D) 이외의 입력이 들어올 경우 큐의 최종 상태를 출력하며 프로그램이 종료됩니다.
출력
입출력 횟수가 끝나거나 프로그램이 중간에 종료되면 큐의 최종 상태를 출력합니다.
입/출력 예시
⋇ 입출력 형식을 잘 지켜주세요.
␣ : 공백
↵ : 줄바꿈
−⇥ : 탭
보기 입력 1
3
e
10
e
20
e
30
출력 1
10 20 30
보기 입력 2
4
d
e
10
e
20
e
30
출력 2
underflow
10 20 30
======================================================================================================
풀이
======================================================================================================
//Please don't change class name 'Main'
import java.util.Scanner;
import java.util.Arrays;
class Main {
/**
문제 그대로 스택과 반대 되는 개념.
FIFO
첫줄은 입출력 횟수...
두번째 줄 부터 d,e (대소문자 상관없다는거 보니) 난 무조건 소문자로 돌려서 개발.
세번째 줄 부터 값
조건중에 d,e 가아닌 다른 값이 오면 프로그램 종료
**** 스택과 비슷해서 가져와서 수정
이 문제는 스택과 다르게 d 를 입력하면 삭제를 시키고 다음 값을 입력 못함
*/
public static void main(String[] args) {
String firstCount;
Scanner scan = new Scanner(System.in);
firstCount = scan.nextLine();
int count = Integer.parseInt(firstCount);
int maxData = 10; //최대값.
String[] stdInArr = new String[count];
if(count == 0) return; //첫줄이 0 이면 더이상 입력 할 값이 없음 또는 최대 10개.
Boolean isStatus = false;
int inputCount= 0; //입력한 모든 값
Boolean isPop = false; //마지막 공백이 들어가서 자꾸 불일치남...
String temp = "";
int ppCount = 0; //d&e count 값
while(!isStatus){
String inputData = scan.nextLine();
// System.out.println("결과값 : " + Arrays.toString(stdInArr));
//입출력횟수 10개가 아닌 queue를 진행 하면서 입출력 중 10번째 입력값이면 overflow !!
if(inputCount > 10){
System.out.print("overflow");
break;
}
if(inputCount % 2 == 0){ // 입력,출력
temp = inputData;
if(inputData.equalsIgnoreCase("d")){
// System.out.println(Arrays.toString(stdInArr));
isPop = true;
//무조건 첫번째면 underflow
if(ppCount == 0){
System.out.println("underflow");
//underflow가 계속 나오게 만들어야함 시스템 종료가 아닌 진행
}else{
//첫번째가 아닌데 이전 값이 null이면 스택이 비어있는 상태
//stdInArr[ppCount] null이면 스택이 비어있는 상태에서 pop을 실행하면 underflow를 출력합니다.
stdInArr[0] = null;
//나중에 0번째 배열을 삭제 후
//다시 << 왼쪽으로 밀어 버리고
//0번째값이 다른 값으로 대치 되야한다.
}
inputCount++;
// break; //푸시인 경우에만 자료의 내용을 다음 줄에 입력합니다.
}
}else{
//EnQueue(입력), DeQueue(출력) 를 을 실행.
if(temp.equalsIgnoreCase("e")){ // EnQueue(입력)
stdInArr[ppCount] = inputData;
ppCount++;
}else if(temp.equalsIgnoreCase("d")){ // DeQueue(출력)
// inputCount++;
}else{
return; //0/1 이아닌 다른값이면 시스템 종료
}
temp = ""; //초기화
}
inputCount++;
if(inputCount == count * 2){
isStatus = true;
}
}
String str = "";
// if(isPop == false){
str = Arrays.toString(stdInArr).replace(", "," ").replace("[","").replace("]","");
// }else{
str = Arrays.toString(stdInArr).replace(", "," ").replace("[","").replace("]","").replace(" null","");
// }
System.out.print(str);
}
}
참고로 저는 알고리즘 풀이 점수는 높은 점수는 아닙니다.
일단 푸는 거에 집중했습니다. 알고리즘에 정답은 없습니다.
더 좋은 알고리즘을 만들어 내는게 목표 입니다.
알고리즘에 대하여 더 이야기 하실분은 댓글남겨주세요!
구름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 Substring(문자열자르기) (0) | 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 |