너무 자주 질문 드려서 죄송합니다... ㅠ

  • mechi
    mechi

    WORDLENGTH 문제를 풀고 있습니다.. ㅎㅎ... 매일매일 이거 하느라 시간가는 줄 모르는데요...

    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.math.BigDecimal;
    import java.util.StringTokenizer;
    
    public class Main {
        public static void main(String[] args) throws NumberFormatException, IOException{
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            int cases = Integer.parseInt(br.readLine());
    
            while(cases-- > 0){
                int wordNumber = Integer.parseInt(br.readLine());
                StringBuffer result = new StringBuffer();
                while(wordNumber-- > 0){
                    if(wordNumber == 0){
                        result.append(br.readLine());
                    } else {
                        result.append(br.readLine() + ",");
                    }
                }
                for(int i=1;i<result.length()-1;i++){
                    if(result.charAt(i) == '-'){
                        if(result.charAt(i+1) == ','){
                            result.delete(i, i+1);
    
                        }
                        if(result.charAt(i-1) == ' ' || result.charAt(i+1) == ' '){
                            result.delete(i, i+1);
                            i--;
                        } else if(isCharter(result.charAt(i-1)) && isCharter(result.charAt(i+1))){
                            result.delete(i, i+1);
                            i--;
                        } else {
                            result.delete(i, i+1);
                            result.insert(i, ' ');
                        }
                    } else if(result.charAt(i) == ','){
                        if(isCharter(result.charAt(i-1)) && isCharter(result.charAt(i+1))){
                            result.delete(i, i+1);
                            result.insert(i, ' ');
                        }
                    }
                }
                StringTokenizer st = new StringTokenizer(result.toString());
                double avr = 0;
                int n = 0;
                while(st.hasMoreTokens()){
                    avr += st.nextToken().length();
                    n++;
                }
                avr = avr/n;
                avr = decimalScale(avr, 3);
                System.out.printf("%.3f\n", avr);
            }
        }
        public static boolean isCharter(char ch){
            if(ch >= 'a' && ch <= 'z'){
                return true;
            } else{
                return false;
            }
        }
        public static double decimalScale(double decimal , int loc) {
           BigDecimal bd = new BigDecimal(decimal);
           BigDecimal result = null;
           result = bd.setScale(loc, BigDecimal.ROUND_HALF_UP);   //반올림
    
           return result.doubleValue();
        }
    }
    

    이런식으로 좀 무식하게 짜보았습니다.. ㅠ 통과해서 다른분들 소스좀 참고하려고 했는데요... 일단 예제에 있는 내용들은 전부 다되는데 다른 어떤게 문제인지 궁금하네요....

    아.. 답답합니다.. ㅠㅠ


    12년 전
5개의 댓글이 있습니다.
  • Being
    Being
    result = result.replaceAll("-", " ");
    

    와 같이 하셨는데, 예를 들어 입력이

    3
    a-
    -b-
    c

    뭐 대충 이런식으로 들어온다고 하면, "a--b-" 에서 c를 붙이는 도중에 앞에 있던 '-'들을 전부 제거해서 문제가 될 것 같습니다.


    12년 전 link
  • Being
    Being

    음... 다시 보니 아닌 것 같네요. 못 본 걸로 해 주세요 ㅎㅎ


    12년 전 link
  • Being
    Being

    N = 1일 때 문제가 되겠네요. "a-b-c" 같은 경우 답이 5가 나올 것 같습니다.


    12년 전 link
  • mechi
    mechi

    말씀하신거 듣고 다른방식으로 다시 짰는데.. 그래도 오류네요.. 1도 되구요 다되요 ㅠㅠ


    12년 전 link
  • mechi
    mechi

    위에 소스가 수정한 소스입니다... ㅠㅠ


    12년 전 link
  • 정회원 권한이 있어야 커멘트를 다실 수 있습니다. 정회원이 되시려면 온라인 저지에서 5문제 이상을 푸시고, 가입 후 7일 이상이 지나셔야 합니다. 현재 문제를 푸셨습니다.