반응형
문제(출처)
다장조는 c d e f g a b C, 총 8개 음으로 이루어져있다.
이 문제에서 8개 음은 다음과 같이 숫자로 바꾸어 표현한다.
c는 1로, d는 2로, ..., C를 8로 바꾼다.
1부터 8까지 차례대로 연주한다면 ascending, 8부터 1까지 차례대로 연주한다면 descending, 둘 다 아니라면 mixed 이다.
연주한 순서가 주어졌을 때, 이것이 ascending인지, descending인지, 아니면 mixed인지 판별하는 프로그램을 작성하시오.
입력
첫째 줄에 8개 숫자가 주어진다. 이 숫자는 문제 설명에서 설명한 음이며, 1부터 8까지 숫자가 한 번씩 등장한다.
출력
첫째 줄에 ascending, descending, mixed 중 하나를 출력한다.
예제 입력
1 2 3 4 5 6 7 8
예제 출력
ascending
내 풀이
import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.IOException;import java.io.InputStreamReader;import java.io.OutputStreamWriter;
public class Main{ public static void main(String args[]) { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); try { String[] scals = br.readLine().split(" ");// 음계를 입력 받습니다. String[] strScals = new String[2]; strScals[0] = "12345678"; strScals[1] = "87654321";// 입력 받을 데이터를 알고 있으므로 비교 할 데이터를 선언합니다. boolean ascending = true; boolean descending = true;// 비교 여부를 확인 할 변수들을 선언합니다. for(int i = 0; i < scals.length; i++) {// 음계 만큼 반복합니다. if(!scals[i].equals(String.valueOf(strScals[0].charAt(i)))) { ascending = false; }// ascending 음계와 하나라도 다르다면 거짓으로 변경합니다. if(!scals[i].equals(String.valueOf(strScals[1].charAt(i)))) { descending = false; }// descending 음계와 하나라도 다르다면 거짓으로 변경합니다. if(!ascending && !descending){ break; }// asceding과 descending이 모두 거짓이라면 반복문을 종료합니다. } if(ascending) { bw.write("ascending"); }else if(descending) { bw.write("descending"); }else { bw.write("mixed"); }// 참인 내용을 출력하고 참이 없다면 "mixed"를 출력합니다. bw.flush(); bw.close(); } catch (IOException e) { e.printStackTrace(); } }}
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
public class Main{
public static void main(String args[]) {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
try {
String[] scals = br.readLine().split(" ");
// 음계를 입력 받습니다.
String[] strScals = new String[2];
strScals[0] = "12345678";
strScals[1] = "87654321";
// 입력 받을 데이터를 알고 있으므로 비교 할 데이터를 선언합니다.
boolean ascending = true;
boolean descending = true;
// 비교 여부를 확인 할 변수들을 선언합니다.
for(int i = 0; i < scals.length; i++) {
// 음계 만큼 반복합니다.
if(!scals[i].equals(String.valueOf(strScals[0].charAt(i)))) {
ascending = false;
}
// ascending 음계와 하나라도 다르다면 거짓으로 변경합니다.
if(!scals[i].equals(String.valueOf(strScals[1].charAt(i)))) {
descending = false;
}
// descending 음계와 하나라도 다르다면 거짓으로 변경합니다.
if(!ascending && !descending){
break;
}
// asceding과 descending이 모두 거짓이라면 반복문을 종료합니다.
}
if(ascending) {
bw.write("ascending");
}else if(descending) {
bw.write("descending");
}else {
bw.write("mixed");
}
// 참인 내용을 출력하고 참이 없다면 "mixed"를 출력합니다.
bw.flush();
bw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
내 풀이 해석
이미 정답을 알고 있으므로 정답을 배열로 선언합니다.
선언 한 배열과 입력 받은 값과 하나씩 비교 하고 하나라도 다르면 거짓으로 변경합니다.
ascending과 descending이 모두 거짓이라면 반복문을 멈춥니다.
거짓 여부를 판단하여 출력합니다.
반응형
'개발(합니다) > 알고리즘&코테' 카테고리의 다른 글
알고리즘 단계별로 풀어보기 : BOJ-11654(아스키코드) (0) | 2018.12.21 |
---|---|
알고리즘 단계별로 풀어보기 : BOJ-10039(평균점수) (0) | 2018.12.21 |
알고리즘 단계별로 풀어보기 : BOJ-8958(OX퀴즈) (0) | 2018.12.20 |
알고리즘 단계별로 풀어보기 : BOJ-2577(숫자의개수) (0) | 2018.12.20 |
알고리즘 단계별로 풀어보기 : BOJ-1152(단어의개수) (0) | 2018.12.20 |