자바코테 lv.0 옹알이 (1)

konut ko·2023년 3월 22일
1

자바코테 Lv0~1

목록 보기
2/12

문제



나의 풀이

3점
살면서 한번쯤은 이렇게 풀어보기도 해야하지 않나


class Solution {
public int solution(String[] babbling) {
        int answer = 0;
        for(int i = 0; i<babbling.length; i++){
            String m = babbling[i];

            int l = babbling[i].length();
            if(l==2){
                answer += (m.equals("ye") || m.equals("ma")) ? 1:0 ;
            }else if(l==3){
                answer += (m.equals("aya") || m.equals("woo")) ? 1:0 ;
            }else if(l==4){
                answer += (m.equals("yema")||m.equals("maye")) ? 1:0 ;
            }else if(l==5){
                answer += (m.equals("ayaye")||m.equals("yeaya")||m.equals("maaya")||m.equals("ayama")||m.equals("wooye")||m.equals("yewoo")||m.equals("mawoo")||m.equals("wooma")) ? 1:0 ;
            }else if(l==6){
                answer += (m.equals("wooaya")||m.equals("ayawoo")) ? 1:0 ;
            }else if(l==7){
                answer += (m.equals("yemawoo")||m.equals("yewooma")||m.equals("mayewoo")||m.equals("mawooye")||m.equals("wooyema")||m.equals("woomaye")|| m.equals("yemaaya")||m.equals("yeayama")||m.equals("mayeaya")||m.equals("maayaye")||m.equals("ayayema")||m.equals("ayamaye")) ? 1:0 ;
            }else if(l==8){
                answer += (m.equals("ayawooye")||m.equals("ayayewoo")||m.equals("yeayawoo")||m.equals("yewooaya")||m.equals("wooyeaya")||m.equals("wooayaye")||m.equals("ayawooma")||m.equals("ayamawoo")||m.equals("maayawoo")||m.equals("mawooaya")||m.equals("woomaaya")||m.equals("wooayama")) ? 1:0 ;
            }else if(l==10){
                answer += (m.equals("ayayewooma")||m.equals("ayayemawoo")||m.equals("ayawooyema")||m.equals("ayawoomaye")||m.equals("ayamayewoo")||m.equals("ayamawooye")||m.equals("yewoomaaya")||m.equals("yewooayama")||m.equals("yemawooaya")||m.equals("yemaayawoo")||m.equals("yeayamawoo")||m.equals("yeayawooma")||m.equals("woomaayaye")||m.equals("woomayeaya")||m.equals("wooayamaye")||m.equals("wooayayema")||m.equals("wooyemaaya")||m.equals("wooyeayama")||m.equals("maayayewoo")||m.equals("maayawooye")||m.equals("mayewooaya")||m.equals("mayeayawoo")||m.equals("mawooayaye")||m.equals("mawooyeaya")) ? 1:0 ;
            }

        }

        System.out.println(answer);
        return answer;
    }
}

하지만 오타 찾으면서 다시는 이렇게 풀지 말자 다짐했다

자바 기본 매서드 부지런히 익히자!

.equals()
m.equals("ye") 문자열 m과 "ye"가 같으면 true, 다르면 false를 반환한다.

위 메서드는
m =="ye" 이 오류가 나서 찾게 된 메서드 이다.
근데 이클립스에서 되는데 ? 왜 오류 났었지 ?

스트링 배열

  • 빈 배열 선언하는 법 : String[] arr1 = new String[3];
  • 원소가 정해진 배열 선언하는 법 : String[] arr2 = {"a","b","c"};
    자바스크립트와 다르게 대괄호가 아닌 중괄호임! 중요!
  • 배열을 출력하면 주소값이 나온다 : System.out.println(arr1); // @1ee0005
  • 그런데 배열의 원소 출력은 제대로 나옴 : System.out.println(arr1[0]); //a

참고 ) 또는 연산 || 도 되고 | 도 된다.
둘의 차이는 if문에서 boolean비교 시 |는 &&처럼 계산한다는것.
if(a||b) 는 a가 참이면 통과되는데 if(a|b)는 a가 참이어도 b를검사한다고 함..

참고2) & 도 마찬가지. if 문에서!
||이랑 &&은 앞에만 검사....
| 이랑 & 는 앞에 통과해도 뒤에까지 검사
|는 앞에서 참이어도 뒤에꺼 검사,
&는 앞에서 거짓이어도 뒤에꺼 검사!




다른사람 풀이 1


정규식 관심 없고

.matches()
boolean matches(String regex)
정규식 사용 안할 때 : ()안 내용이 정.확.히 일치해야 True 반환함.




다른사람 풀이 2

문자열에서 일치하는 단어를 찾아 "1"로 대체했다.
빈문자열""로 대체 하지 않은 이유는 wyeoo와 같은 단어의 경우 ye소거후 woo가 완성 되기 때문이다.

.replace(a, b)
a를 b로 모두 바꿔주는 문자열 치환 매서드.
원본 문자열 수정X므로 바로 쓰거나 변수에 담아 사용.
aaa > bbb

참고) .replaceFirst(a, b)
바꾸고 싶은 문자열이 처음으로 해당할 때만 치환한다.
원본 문자열 수정X므로 바로 쓰거나 변수에 담아 사용.
aaa > baa




다른사람 풀이 3

import java.util.Arrays;

// 문제 : 옹알이
// 결과 : 성공
// Score : 100
public class Solution {

    final String[] WORD = { "aya", "ye", "woo", "ma" };

    public int solution(String[] param) {
        return (int) Arrays.stream(param).filter(i -> checkWord(replaceWord(i))).count();
    }

    // 발화 가능한 단어를 연산에 용이하도록 수정
    String replaceWord(String param) {
        for (int i = 0; i < 4; i++) {
            param = param.replace(WORD[i], Integer.toString(i));
        }

        return param;
    }

    // 연속된 단어, 발화 가능한 단어인지 확인
    boolean checkWord(String param) {
        if (param.replaceAll("[0-3]", "").length() == 0) {
            char target = param.charAt(0);

            for (int i = 1; i < param.length(); i++) {
                if (target == param.charAt(i)) {
                    return false;
                } else {
                    target = param.charAt(i);
                }
            }

            return true;
        }
        return false;
    }

}

나중에 공부




profile
보초딩코라 틀린 내용 있을 수도 있습니다. 댓글 지적 환영

0개의 댓글