java를 처음 배우고 기초적인 구현 문제들을 JAVA로 구현해 보려고 하는데... 이 문제에서 틀릴 수 있는 부분이 어디가 있는지가 궁금합니다.
이미 처리를 한 내용은 이렇습니다.
- 0미만, 10이상 결과에 대해 무조건 false 반환
- 각 문자가 나온 갯수를 저장하는 배열을 만들고 (초기화한 뒤) 갯수를 저장함
import java.util.Scanner;
public class Main
{
public static Scanner get = new Scanner(System.in);
public static void main(String args[])
{
Main work=new Main();
work.start();
}
public void start()
{
int cnum = get.nextInt(); // case 갯수 입력
get.nextLine();
while (cnum--!=0) StartSolve();
get.close();
}
public void StartSolve()
{
String input = get.nextLine();
String[] split = input.split(" ");
// s[0] = argument[1], s[1] = operator, s[2] = argument[2], s[3] = "=", s[4] = result 로 분리된다
int[] arg={0,0};
int res=0;
for (int i=0;i<2;i++) { // i = 0 : arg[0] <<< split[0]
switch (split[2*i]) { // i = 1 : arg[1] <<< split[2]
case "zero" : arg[i]=0; break;
case "one" : arg[i]=1; break;
case "two" : arg[i]=2; break;
case "three" : arg[i]=3; break;
case "four" : arg[i]=4; break;
case "five" : arg[i]=5; break;
case "six" : arg[i]=6; break;
case "seven" : arg[i]=7; break;
case "eight" : arg[i]=8; break;
case "nine" : arg[i]=9; break;
case "ten" : arg[i]=10; break;
}
}
switch (split[1]) { // 연산자 : split[1]
case "+" : res = arg[0] + arg[1]; break;
case "-" : res = arg[0] - arg[1]; break;
case "*" : res = arg[0] * arg[1]; break;
}
System.out.println(Solve(res,split[4]) ? "Yes" : "No"); // 결과 문자열 : split[4]
}
public boolean Solve(int res,String hand)
{
if (res>10 || res<0) return false; // 도출한 정답이 범위 밖이면 바로 리턴
int[] chance = new int[26]; // 각 글자가 나오는 횟수를 저장할 배열을 하나 만든다.
String answer;
switch (res) {
case 0: answer="zero"; break;
case 1: answer="one"; break;
case 2: answer="two"; break;
case 3: answer="three"; break;
case 4: answer="four"; break;
case 5: answer="five"; break;
case 6: answer="six"; break;
case 7: answer="seven"; break;
case 8: answer="eight"; break;
case 9: answer="nine"; break;
case 10: answer="ten"; break;
default: answer=""; break;
}
for (int i=0;i<26;i++) chance[i]=0;
// hand 문자열의 각 글자에 대해서 그 문자의 갯수를 저장하는 배열의 원소를 1 증가시킨다.
for (int i=0;i<hand.length();i++) if (hand.charAt(i)>=98 && hand.charAt(i)<=113) chance[hand.charAt(i)-98]++;
// answer 문자열에 대해서는 1씩 감소시킨다. (answer 문자열은 "알파벳 소문자에 포함될 경우" 처리를 하지 않음)
for (int i=0;i<answer.length();i++) chance[answer.charAt(i)-98]--;
// 두 개의 문자열에 나오는 문자 셋들이 같다면 모든 문자에 대해서 배열의 원소가 0이 나올 것이다
for (int i=0;i<26;i++) if (chance[i]!=0) return false;
return true;
}
}
jun6873
java를 처음 배우고 기초적인 구현 문제들을 JAVA로 구현해 보려고 하는데... 이 문제에서 틀릴 수 있는 부분이 어디가 있는지가 궁금합니다.
이미 처리를 한 내용은 이렇습니다.
- 0미만, 10이상 결과에 대해 무조건 false 반환
- 각 문자가 나온 갯수를 저장하는 배열을 만들고 (초기화한 뒤) 갯수를 저장함
10년 전