문제
https://algospot.com/judge/problem/read/XHAENEUNG
위 사이트를 들어가서 확인
문자로 입력받은 숫자들의 연산을 하여, 결과값으로 출력해주는 문제였다.
주의할점
연산을 하였을 때, 결과값이 10을 넘거나 0보다 작을 시 정답이 아닌걸로 간주한다.
문제가 비교적 쉬운 문제라, 위의 주의할점만 제대로 지키면 해결할 수 있을거라 생각합니다.
푼방법
문자를 숫자값으로 변환하여, 연산을 처리한다.
처리한 결과값을 다시 문자열값으로 변환하여, 제공된 결과값과 비교한다.
비교 시 two * five = svene 이런식으로 알파벳 개수가 같을 시에도 정답으로 인정해줘야한다.
한 문자씩 비교하여, 정답으로 제공된 결과값에서 빼주는 식으로 처리하였다.
코드
package com.yjh.algol; import java.util.Scanner; public class XHAENEUNG { static String num[] = { "zero", "one", "two", "three", "four", "five", "six", "seven","eight","nine", "ten" }; public static void main(String[] args) {
Scanner scanner = new Scanner(System.in); int n = scanner.nextInt(); int fNum = 0; int lNum = 0; String oper ; String sresult; int result = -1; for ( int i = 0 ; i < n ; i++ ) { // 숫자들의 입력을 받아올 때, 위에 num[]에 저장 된 문자열과 비교하여 숫자값으로 바꿔준다. fNum = findNum( scanner.next() ); oper = scanner.next(); lNum = findNum( scanner.next() );
scanner.next(); sresult = scanner.next(); // 받은 두 숫자값을 이용, 결과값을 출력해준다. if( oper.equals("+")) { result = fNum + lNum; } else if ( oper.equals("-") ) { result = fNum - lNum; } else if ( oper.equals("*") ) { result = fNum * lNum; } // 예외 처리) 숫자가 10보다 크거나, 0보다 작음 잘 못된 값으로 간주한다. if( result > 10 || result < 0 ) { System.out.println("No"); continue; } // 연산을 한 숫자 문자열 값과, 결과값으로 제공된 값을 비교한다. // 길이가 같다면 한 글자씩 없애준다. // 결과로서 모든 문자열이 제거 됐다면 성공, 아닐 시 실패 int length = sresult.length(); int nlength = num[result].length(); String temp; boolean tfalse = true; if( length != nlength ) { tfalse = false; }else { temp = num[result]; for (int j = 0 ; j < length ; j++) { temp = temp.replaceFirst(sresult.charAt(j)+"", ""); } if(temp.length() > 0) { tfalse = false; } } if(tfalse) { System.out.println("Yes"); } else { System.out.println("No"); }
}
}
static int findNum(String number) { int index = -1;
for( int i =0 ; i < num.length ; i++) { if( number.equals(num[i])) { index = i; break; } } return index; } }
|
'algolism' 카테고리의 다른 글
[알골스팟] PACKING 문제 (0) | 2018.03.03 |
---|---|
[카카오예선문제]캠핑풀이설명 (0) | 2018.02.24 |