Jaeyoung Kim
나의 개발 공부 일지
Jaeyoung Kim
전체 방문자
오늘
어제
  • 분류 전체보기 (77)
    • WIL👨‍🏫 (16)
    • 🤖Algorithm (29)
    • 🖥CS (20)
      • 기술면접대비🔎 (10)
    • ✍️개발로그 (10)

블로그 메뉴

  • 홈
  • 방명록
  • 글쓰기
  • 설정

공지사항

인기 글

태그

  • 개발로그
  • WIL
  • transaction
  • 백준2920
  • 트랜잭션
  • 프로그래머스
  • 회고록
  • 백준
  • HTTP
  • 항해99
  • 데이터자료구조
  • til
  • sql
  • querydsl
  • rest
  • N-gram parser
  • SQLD
  • API
  • Java
  • 자바

최근 댓글

최근 글

티스토리

250x250
hELLO · Designed By 정상우.
Jaeyoung Kim

나의 개발 공부 일지

[프로그래머스] 문자열 내 p와 y의 개수 Java
🤖Algorithm

[프로그래머스] 문자열 내 p와 y의 개수 Java

2022. 7. 21. 10:57
728x90

문자열 내 p와 y의 개수


문제 설명

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

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


제한사항

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

입출력 예

s answer
"pPoooyY" true
"Pyy" false

 

 


입출력 예 설명

입출력 예 #1

  • 'p'의 개수 2개, 'y'의 개수 2개로 같으므로 true를 return 합니다.

입출력 예 #2

  • 'p'의 개수 1개, 'y'의 개수 2개로 다르므로 false를 return 합니다.

기본코드

class Solution {
    boolean solution(String s) {
        boolean answer = true;

        // [실행] 버튼을 누르면 출력 값을 볼 수 있습니다.
        System.out.println("Hello Java");

        return answer;
    }
}

문제풀이

이전에 내가 풀기를 한 번 실패하고 넘어갔던 문제를 금일 있을 알고리즘 테스트 준비를 위해 다시 풀어봤다.

그 때 익혔던 .equals()를 사용하니 문제 풀이가 가능했다.

 

문제에 있어 내가 전개해나갔던 풀이는 다음과 같다.

String s의 문자들을 for문을 통해 배열 pY에 넣는다. 배열 pY의 길이는 문자열 s와 동일하게 설정하였다.

그 후 배열 pY를 한 번 더 for문을 돌리며 각각의 인덱스를 확인하며 p나 P일 경우 countP를 1,

y나 Y일 경우 countY를 1 증가시켰다.

그리고 마지막으로 countP와 countY의 크기가 같으면 boolean answer는 true 아니면 false가 출력되게 만들었다.

class Solution {
    boolean solution(String s) {
        String[] pY = new String[s.length()];
        for(int i = 0; i <s.length(); i++){
            pY[i] = s.substring(i, i+1);
        }
        
        int countP = 0;
        int countY = 0;
        for(int i = 0; i <pY.length; i++){
            if(pY[i].equals("y") || pY[i].equals("Y")){
                countY++;
            }else if(pY[i].equals("p") || pY[i].equals("P")){
                countP++;
            }
        }
        
        boolean answer = (countP == countY) ? true : false;
        return answer;
    }
}

한 번에 테스트가 통과되어 발전한 나의 실력의 뿌듯해 하고 있기를 잠시,

이전에 모범답안으로 가져왔던 코드를 확인하니 내가 불필요한 과정을 한 번 더 만들었다는걸 알게되었다.

 

굳이 배열 pY를 만들었을 필요 없이, 문자열 s를 s의 길이만큼 for문을 돌면서 charAt으로 뜯어보면 되는거였다..

아직 갈 길이 멀다.

대신 charAt을 써서 나오는 값은 String이 아닌 char로 분류되기에 " "(큰따옴표)가 아닌 ' '(작은따옴표)에 넣어야한다.


Solution.java

class Solution {
    boolean solution(String s) {
        int countP = 0;
        int countY = 0;
        for(int i = 0; i < s.length(); i++)
            if(s.charAt(i) == 'p' || s.charAt(i) == 'P'){
                countP += 1;
            }else if(s.charAt(i) == 'y' || s.charAt(i) == 'Y'){
                countY += 1;
            }
            if(countP == countY){
                return true;
            }else{
                return false;
            }
    }
}
728x90

'🤖Algorithm' 카테고리의 다른 글

[프로그래머스] 서울에서 김서방 찾기 Java  (0) 2022.07.21
[프로그래머스] 문자열 다루기 기본 Java  (0) 2022.07.21
[프로그래머스] 자릿수 더하기 Java  (0) 2022.07.19
[프로그래머스] 완주하지 못한 선수 Java  (0) 2022.07.19
[프로그래머스] 하샤드 수 Java  (0) 2022.07.19
    '🤖Algorithm' 카테고리의 다른 글
    • [프로그래머스] 서울에서 김서방 찾기 Java
    • [프로그래머스] 문자열 다루기 기본 Java
    • [프로그래머스] 자릿수 더하기 Java
    • [프로그래머스] 완주하지 못한 선수 Java
    Jaeyoung Kim
    Jaeyoung Kim
    보다 안정적인 코드 구현을 꿈꾸는 백엔드 개발자 지망생

    티스토리툴바