2023.04.11(2)

Jay Ji·2023년 4월 11일
0
post-thumbnail

Problem

대문자와 소문자가 섞여있는 문자열 s가 주어질때, s에 'p'의 개수와 'y'의 개수를 비교해 같으면 True, 다르면 False를 return 하는 solution을 구축

What I tried

나의 전략은 아래와 같았다:

  1. String s를 for문을 두번 돌려서, if문으로 "p" || "P"가 없으면 "true", 그리고 그 안에 또 다른 if문을 넣어 "y" || "Y"가 없으면 "true"로 p나 y가 있는지 확인
  2. 만약 없을 경우 "p"는 countP++ 값으로, "y"는 countY++ 값으로 넣기
  3. if 문을 사용하여 countP == countY 일 경우 true, 아닐 경우 false

What was Wrong?

위의 전략대로 아래와 같이 코드를 구현해 보았다.

class Solution {
    boolean solution(String s) {
        int countY = 0;
        int countP = 0;

        for(int i = 0; i < s.length(); i++) {
            for (int j = 0; j < s.length(); j++) {
                if (s[i] != "p" || "P") {
                    if (s[i] != "y" || "Y");
                    countP = 0;
                } else if (s[i] == "p" || "P"){
                    countP++;
                } else {
                    countY++;
                }
            }
        }
        boolean a;
        if (countP == countY){
            a = true;
        } else {
            a= false;
        }
        return a;
    }
}

하지만 for문 안에 있는 if문의 s에 자꾸 에러가 떴다. 그리고 코드를 전체적으로 봤을때, 반복적으로 진행되는 부분이 많아보여 줄일 수 있다고 생각도 들었지만, 일단은 내가 짠 전략대로 작성해보기로 했다. 하지만 저 상태로 돌리게되면 java: array required, but java.lang.String found이라는 문구가 나왔다.

What I Learned

나의 전략을 사용하기 위해선 아래와 같이 코드 작성이 필요했다.

class Solution {
    boolean solution(String s) {
        int countY = 0;
        int countP = 0;

        for(int i = 0; i < s.length(); i++) {
            for (int j = 0; j < s.length(); j++) {
                if (s.charAt(i) == 'p' || s.charAt(i) == 'P') {
                    countP++;
                } else if (s.charAt(i) == 'y' || s.charAt(i) == 'Y'){
                    countY++;
                }
            }
        }
        boolean a;
        if (countP == countY){
            a = true;
        } else {
            a= false;
        }
        return a;
    }
}

해당 알고리즘을 풀면서 가장크게 두가지를 배웠다:

  1. "" & '' - character 하나만을 나타내고 싶을 경우에는 ""이 아닌 ''을 사용해야 하며, ""의 경우 string에 사용
  2. || - OR operator 사용할 경우 s[i] != "p" || "P" 해당문구는 항상 true일 것이다. 그러므로 (어차피 틀린거지만 만약 사용한다고 할땐) s[i] != "p" || s[i] != "P" 라고 각각 명시해 줘야함
  3. charAt - String과 character는 비교할 수 없는 대상이기에 s[i]로 했을 때 오류가 났음. character과 String을 비교할 경우 꼭 charAt 사용 필수!
  4. boolean - 처음에 코드를 작성하였을 때 a 값을 boolean에서 바로 줌
if (countP == countY){
            boolean a = true;
        } else {
            boolean a= false;
        }
        return a;

하지만 곧 boolean a; 를 앞에 먼저 명시해줘야 하는 것이 생각나 아래 부분은 변경함

이미 알고 있던 개념들이였어도, 막상 실제로 코드를 짤 때에는 어떻게 작용하는지 아직 잘 모르는 것 같다. 개념들을 조금 더 자세히 이해하기 위해 자료구조, 기본적인 operator등을 더 공부해야겠다.

profile
Think out of the Box

0개의 댓글