코드 그라데이션

[Lv.1] 문자열 내 p와 y의 개수 본문

Java/알고리즘

[Lv.1] 문자열 내 p와 y의 개수

완벽한 장면 2023. 2. 3. 00:46

문자열 내 p와 y의 개수

문제 설명

대문자와 소문자가 섞여있는 문자열 s가 주어집니다. s에 'p'의 개수와 'y'의 개수를 비교해 같으면 True, 다르면 False를 return 하는 solution를 완성하세요. 'p', 'y' 모두 하나도 없는 경우는 항상 True를 리턴합니다. 단, 개수를 비교할 때 대문자와 소문자는 구별하지 않습니다.

예를 들어 s가 "pPoooyY"면 true를 return하고 "Pyy"라면 false를 return합니다.

 

제한사항

  • 문자열 s의 길이 : 50 이하의 자연수
  • 문자열 s는 알파벳으로만 이루어져 있습니다.

입출력 예

 

입출력 예 설명

입출력 예 #1
'p'의 개수 2개, 'y'의 개수 2개로 같으므로 true를 return 합니다.

입출력 예 #2
'p'의 개수 1개, 'y'의 개수 2개로 다르므로 false를 return 합니다.

 

일단 접근했던 첫 번째 순서

// 1. s를 입력받는다.
// 2. s에 p의 개수가 몇 개인지 센다.
// 3. s에 y의 개수가 몇 개인지 센다.
// 4. 둘을 비교한다.
// 5. 결과를 출력한다.

 

 

문자열 돌기 설명

 public class Main {
 	public static void main(String[] args) {
 		
        String str = "hello world";
        
        int[] numbers = new int[5];
        numbers = {1, 2, 3, 4, 5}
        
        System.out.println(str.length());
        System.out.println(numbers.length);
        
        System.out.println(numbers[0]);
        
        //그런데.. System.out.println(str[0]);는.. 틀림
        이걸 어떻게 바꿔줘야 하냐면
        System.out.println(str.charAt[0]); 이렇게 써주어야 한다.
        
        그래서 마치 문자열이 배열인것처럼 출력할 수 있게 된다.
        System.out.println(str.charAt[0]);
        System.out.println(str.charAt[1]);
        System.out.println(str.charAt[2]);
        System.out.println(str.charAt[3]);
        System.out.println(str.charAt[4]);
        
        // 위에 것의 패턴은 뭘까? => 다 똑같고 [] 안에 숫자만 규칙적으로 바뀌네!
        => "반복문을 쓸 수 있겠네!!"
        
        즉,
        for (int i = 0, i<str.length(); i++) {
         System.out.println(str.charAt(i)); // hello world 출력
        }
        
        System.out.println(str); // 이것도 hello world 출력됨
        
        따라서, 문자열을 도는 방법은 문자열의 길이만큼 반복을 하면서 i<str.length();
        한 칸 한 칸을 얻을 때는 .charAt(i)); 으로 가져온다!
 	}
}

두 개의 차이를 보자, String에서는 length() 가 함수로 있지.
배열에서는 length가 그냥 필드야.

System.out.println(str[0]); 틀림 // 틀린 이유는...

솔직히 자세히 보면 얘는 배열이긴 하나 한 번 감싸진 배열이다.
즉, 지금 형태는 클래스인 거야.
 

 

 

풀이 진행 상황 처음 도전

class Solution {
    boolean solution(String s) {
        boolean answer = true;
        
        for (int i = 0; i< s.length(); i++) {
			System.out.println(s.charAt(i));
       }
    }
}
일단 여기까지 하면 1번은 끝. 문자열을 도는 것까지는 끝낸 것

이제... 2번, 3번 해야 됨.

p나 P가 있는지 확인해보면 되고,
s나 S가 있는지 확인해보면 됨.

어떻게? 하나씩 돌면서!
꺼내서 확인해보면 되지...

그런데 위에서 이미 문자열 도는 것은 작성해 두었잖아.
그러면 그거에 맞춰서 p나 P / s나 S를 확인해보면 되지.

그럼 위에서 작성한 부분 중에, System.out.println(s.charAt(i)); 부분에 
하나씩 꺼내서 확인하는 걸 쓰면 되는 거야.

다시 작성한 식을 가져와보면,

class Solution {
    boolean solution(String s) {
        boolean answer = true;
       	int alpha = 0 ; // p/P의 개수 담을 변수 선언해줬음
        
        for (int i = 0; i< s.length(); i++) {
        	// 여기에 if를 넣는다.
			if(s.charAt(i) == 'p' || s.charAt(i) == 'P') { // 대소문자 구분하므로
            // 여기엔, 해당하면 하나씩 개수를 증가하는 걸 구현해줘야 하니까
            // 해당하는 변수를 넣어줘야함. 그런데 리턴하기 위에서 가장 밖에서 하나 선언해줘야지.
            	alpha++;
            "이렇게 하면 2번 완료!"    
       		}	
        }
        
       3번 차례
          for (int j = 0; j< s.length(); j++) {
            if(s.charAt(j) == 'y' || s.charAt(j) == 'Y') { 
                beta++;
                
        "3번 구현 완료"        
            }       
    	}
}

 

마무리로 4번과 5번

 결과를 비교하고, true / false 출력해준다.

class Solution {
    boolean solution(String s) {
        boolean answer = true;
        int alpha = 0;
        int beta = 0;
        
        for (int i = 0; i< s.length(); i++) {
            if(s.charAt(i) == 'p' || s.charAt(i) == 'P'){
                alpha++;
            }
          }
        for (int j = 0; j< s.length(); j++) {
            if(s.charAt(j) == 'y' || s.charAt(j) == 'Y'){
                beta++;
            }
        }
        if(alpha == beta) { // 4번
            return true;
        } else {
            return false; // 5번
        }
       
    }
}

유의사항

문자열 비교할 때 작은따옴표 쓰자

최종본

class Solution {
    boolean solution(String s) {
        boolean answer = true;
        int alpha = 0;
        int beta = 0;
        
        for (int i = 0; i< s.length(); i++) {
            if(s.charAt(i) == 'p' || s.charAt(i) == 'P'){
                alpha++;
            }
          }
        for (int j = 0; j< s.length(); j++) {
            if(s.charAt(j) == 'y' || s.charAt(j) == 'Y'){
                beta++;
            }
        }
        if(alpha == beta) {
            return true;
        } else {
            return false;
        }       
    }
}
// 1. s를 입력받는다.
// 2. s에 p의 개수가 몇 개인지 센다.
// 3. s에 y의 개수가 몇 개인지 센다.
// 4. 둘을 비교한다.
// 5. 결과를 출력한다.
728x90

'Java > 알고리즘' 카테고리의 다른 글

[백준] 시험 성적  (0) 2023.03.18
[백준] 사분면 고르기  (0) 2023.03.18
[Lv.1] 평균 구하기  (0) 2023.02.02
[Lv.1] 행렬의 덧셈  (0) 2023.02.02
[lv.0] 배열의 평균값  (0) 2023.01.25
Comments