devnoong.log
article thumbnail
728x90

 

프로그래머스 Level 1 옹알이(2) JAVA 풀이 과정

 

머쓱이는 태어난 지 11개월 된 조카를 돌보고 있습니다. 조카는 아직 "aya", "ye", "woo", "ma" 네 가지 발음과 네 가지 발음을 조합해서 만들 수 있는 발음밖에 하지 못하고 연속해서 같은 발음을 하는 것을 어려워합니다. 문자열 배열 babbling이 매개변수로 주어질 때, 머쓱이의 조카가 발음할 수 있는 단어의 개수를 return하도록 solution 함수를 완성해주세요.



초반에  substring을 이용하여 아래와 같이 시도하였으나,  substring으로 해당 글자 순서가 아니면 존재하는  문자를 체크를 못한다는 단점이 존재했다.

 		 int answer = 0;
		 List<String> avaivable = Arrays.asList(new String[] { "aya", "ye", "woo", "ma" });
		 
		 for(String str : babbling) {
			 String temp = str;
			 for(String avaivableStr : avaivable) {
				 int strLength = avaivableStr.length();
				 if(temp.length()>0 &&temp.length()>=strLength&&temp.substring(0,strLength).equals(avaivableStr)) {
					 temp = temp.substring(strLength);
				 }else {
					 continue;
				 }
				 
				 if(temp.length()==0) { 
					 answer++;
				  }
			 }
			 
		 }

 

 

그렇기에 모든 문자를 체크하면서 같은 문자를 찾아주는 함수를 생각해냈고 subring을 이용하여 글자수를 줄이는것 대신 replace 함수를 이용하여 코드를 아래와 같이 변환하였다.

 

중복을 허용하지 않기때문에 반복되는 문자는 String 함수의 repeat를 이용하여 만들어 indexOf로 체크하여 존재하면 다른 문자로 치환 후 문자가 같으면 빈값으로 처리를 진행했다.

 

         int answer = 0;
		 List<String> avaivable = Arrays.asList(new String[] { "aya", "ye", "woo", "ma" });
		 
		 for(String str : babbling) {
			 String temp = str;
			 for(String aStr : avaivable) {
				 if(temp.indexOf(aStr.repeat(2))!=-1) {
					temp = temp.replace(aStr.repeat(2), "d");
				 }else {
					 temp = temp.replace(aStr, "");
				 }
			
				 if(temp.length() == 0) {
					 answer++;
					 break;
				 }
			 }
			 
		 }

 

예제 문제는 통과했지만 테스트 케이스를 일부 통과하지 못했다...

뭐가 문제일까 ㅜㅜ

 

 

확인해보니 위의 코드중에 ' temp = temp.replace(aStr, ""); ' 에 해당하는 부분으로 인해 앞뒤 글자가 붙어버려 새로운 단어로 인식하는 문제가 존재했었다.

 

" " 공란으로 변경 후 체크하는 위치를 첫번째 for문 밖으로 변경 후 마지막에 공란을 제거 하고 체크 하니 문제를 통과했다 ㅠㅠ

         int answer = 0;
         List<String> avaivable = Arrays.asList(new String[] { "aya", "ye", "woo", "ma" });

         for(String str : babbling) {
             String temp = str;
             for(String aStr : avaivable) {
                 if(temp.indexOf(aStr.repeat(2))!=-1) {
                    temp = temp.replace(aStr.repeat(2), "d");
                 }else {
                     temp = temp.replace(aStr, " ");
                 }

             }

             temp = temp.replace(" ","");
              if(temp.length() == 0) {
                     answer++;
                 }

         }

다른사람 풀이

 

 

for문을 한번만 사용해서 replace를 여러번 수행하여 이중 포문이 아니라 반복문 한번으로 처리를 수행하였다.

 for(int i = 0; i < babblings.length; i++) {
            if(babblings[i].contains("ayaaya") || babblings[i].contains("yeye") || babblings[i].contains("woowoo") || babblings[i].contains("mama")) {
                continue;
            }

            babblings[i] = babblings[i].replace("aya", " ");
            babblings[i] = babblings[i].replace("ye", " ");
            babblings[i] = babblings[i].replace("woo", " ");
            babblings[i] = babblings[i].replace("ma", " ");
            babblings[i] = babblings[i].replace(" ", "");

            if(babblings[i].length()  == 0) answer++;

        }
728x90