강의로 돌아가기
kyj1991719

테스트 케이스는 통과하는데 무엇이 빠졌는지는 모르겠네요

//테스트 케이스
"HaEaLaLaObWORLDb" ->  "HELLO WORLD"

"SpIpGpOpNpGJqOqA" ->  "SIGONG JOA"

"AxAxAxAoBoBoB" ->  "invalid"

"aIaAM" -> "I AM"

"baHELLOabWORLD" -> "invalid"

"aHbEbLbLbOacWdOdRdLdDc" ->  "HELLO WORLD"

"bAaOb" -> "AO"



// 소스
import java.util.HashMap;
import java.util.LinkedList;
import java.util.Queue;
class Solution {
  public String solution(String sentence) {
      String answer = "";

          HashMap<String, Integer> map = new HashMap<>();

          if(sentence.contains(" ")) {
              return "invalid";
          }

          Queue<String> queue = new LinkedList<>();

          int capitalLen = 0;
            for(char tmp : sentence.toCharArray()) {
                if(((int)tmp) >= 97) {
                    String key = String.valueOf(tmp);
                    if(map.containsKey(key)) {
                        map.put(key, (map.get(key)+1));
                    } else {
                        map.put(key, 1);
                        queue.add(key);
                    }
                } else {
                    capitalLen++;
                }
            }

            if(map.size() == 0) {
                return answer;
            }

          System.out.println("size::" + map.size());
          while(!queue.isEmpty()) {
              String str = queue.poll();
              System.out.println(str + "," + map.get(str));
              int first = sentence.indexOf(str);
              int last = sentence.lastIndexOf(str);

              if(first == last) {
                  return "invalid";
              }

              String subStr;
              if(first == 0) {
                  if(last == sentence.length()) {
                      subStr = sentence.substring(first+1);
                      sentence = "";
                  } else {
                      subStr = sentence.substring(first+1, last);
                      sentence = sentence.substring(last+1);
                  }

                  if(containSmallLetter(subStr)) {
                      String next = getSmallLetter(subStr);
                      if(next.equals(queue.poll()) && isContinueText(next, subStr)) {
                          subStr = subStr.replace(next, "");
                      } else {
                          return "invalid";
                      }
                  }
              } else {
                  if(last + 2 > sentence.length()) {
                      subStr = sentence.substring(first-1);
                      sentence = "";
                  } else {
                      subStr = sentence.substring(first-1, last+2);
                      sentence = sentence.substring(last+2);
                  }

                  System.out.println(subStr);
                  if(isContinueText(str, subStr)) {
                      subStr = subStr.replace(str, "");   
                  } else {
                      return "invalid";
                  }
              }

              System.out.println(subStr + "," + sentence);

              if(containSmallLetter(subStr)) {
                  return "invalid";
              } else {
                  answer += subStr;
                  answer += " ";
              }
          }

          if(!sentence.isEmpty()) {
              if(containSmallLetter(sentence)) {
                  return "invalid";
              } else {
                  answer += sentence;
                  answer += " ";
              }   
          }

          if(capitalLen != answer.replace(" ", "").length()) {
              answer = "invalid";
          } else {
              answer = answer.substring(0, answer.length()-1);
          }     

          return answer;
  }

    private boolean containSmallLetter(String str) {
        for(char tmp : str.toCharArray()) {
            if(((int)tmp) >= 97) {
                return true;
            }
        }

        return false;
    }

    private String getSmallLetter(String str) {
            for(char tmp : str.toCharArray()) {
                if(((int)tmp) >= 97) {
                    return String.valueOf(tmp);
                }
            }
            return "";
        }

    private boolean isContinueText(String tmp, String str) {
        int idx = str.indexOf(tmp);

        for(int i = 1; i < str.length(); i+=2) {
            if(!tmp.equals(String.valueOf(str.charAt(i)))) {
                return false;
            }
        }

        return true;
    }
}
1 개의 답변
Kyuyeon

TxTxTxbAb => invalid
bTxTxTaTxTbkABaCDk => invalid

저는 이 두 케이스에서 예외가 났었습니다.

답변 쓰기
이 입력폼은 마크다운 문법을 지원합니다. 마크다운 가이드 를 참고하세요.