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

2024. 10. 14. 00:32·여러가지/알고리즘 & 자료구조

문제 설명
주어진 문자열 s에서 대소문자 구분 없이 문자 'p'와 'y'의 개수를 비교하여, 개수가 같으면 True, 다르면 False를 반환하는 문제입니다.
또한, 'p'와 'y'가 모두 하나도 없는 경우에도 True를 반환해야 합니다.


제한 사항

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

입출력 예

s answer
"pPoooyY" true
"Pyy" false
  • 입출력 예 #1: 'p'의 개수 2개, 'y'의 개수 2개로 같으므로 true를 반환합니다.
  • 입출력 예 #2: 'p'의 개수 1개, 'y'의 개수 2개로 다르므로 false를 반환합니다.

문제 풀이

이 문제에서는 주어진 문자열에서 대소문자를 구분하지 않고 'p'와 'y'의 개수를 비교해야 합니다. 이를 위해 문자열을 모두 소문자 또는 모두 대문자로 변환한 뒤, 각 문자의 개수를 비교하는 방식으로 해결할 수 있습니다.

1. Python 코드 풀이

def solution(s):
    # 문자열을 모두 소문자로 변환
    s = s.lower()

    # 'p'의 개수와 'y'의 개수를 각각 세기
    return s.count('p') == s.count('y')

# 테스트 예시
print(solution("pPoooyY"))  # 출력: True
print(solution("Pyy"))      # 출력: False

코드 설명

  1. s.lower()를 통해 문자열 s를 모두 소문자로 변환합니다.
    • 이렇게 하면 대소문자를 구분하지 않고 비교할 수 있습니다.
  2. s.count('p')와 s.count('y')를 사용하여 'p'와 'y'의 개수를 각각 세고, 두 값이 같으면 True, 다르면 False를 반환합니다.
    • 'p'와 'y'가 모두 없는 경우에는 둘 다 0이므로, 이 경우에도 True가 반환됩니다.

2. Java 코드 풀이

class Solution {
    boolean solution(String s) {
        // 문자열을 모두 소문자로 변환
        s = s.toLowerCase();

        // 'p'와 'y'의 개수를 카운트할 변수
        int pCount = 0;
        int yCount = 0;

        // 문자열을 순회하며 'p'와 'y'의 개수 세기
        for (char c : s.toCharArray()) {
            if (c == 'p') {
                pCount++;
            } else if (c == 'y') {
                yCount++;
            }
        }

        // 'p'의 개수와 'y'의 개수가 같으면 true, 다르면 false
        return pCount == yCount;
    }

    public static void main(String[] args) {
        Solution sol = new Solution();
        System.out.println(sol.solution("pPoooyY"));  // 출력: true
        System.out.println(sol.solution("Pyy"));      // 출력: false
    }
}

코드 설명

  1. s.toLowerCase()를 사용하여 문자열을 모두 소문자로 변환합니다.
    • 이렇게 하면 대소문자를 구분하지 않고 비교할 수 있습니다.
  2. pCount와 yCount를 사용하여 'p'와 'y'의 개수를 세고, 문자열을 순회하면서 해당 문자가 'p'이면 pCount를 증가시키고, 'y'이면 yCount를 증가시킵니다.
  3. 최종적으로 'p'와 'y'의 개수가 같으면 true, 다르면 false를 반환합니다.

3. 시간 복잡도 분석

  • 시간 복잡도: 문자열의 길이가 n일 때, 문자열을 한 번 순회하면서 'p'와 'y'의 개수를 세므로, 시간 복잡도는 O(n)입니다.
    • Python에서는 s.count() 함수도 내부적으로 문자열을 한 번 순회하기 때문에 O(n)입니다.

결론

이 문제는 문자열을 대소문자 구분 없이 특정 문자의 개수를 세고 비교하는 문제로, lower() 또는 toLowerCase()와 같은 메서드를 활용하여 간단하게 해결할 수 있습니다. 시간 복잡도는 O(n)으로, 주어진 제한 내에서 매우 효율적으로 처리할 수 있습니다.

저작자표시 (새창열림)

'여러가지 > 알고리즘 & 자료구조' 카테고리의 다른 글

[프로그래머스] 정수 내림차순으로 배치하기  (1) 2024.10.14
[프로그래머스] 자연수 뒤집어 배열로 만들기  (0) 2024.10.14
[프로그래머스] 약수의 합  (0) 2024.10.13
[프로그래머스] 자릿수 더하기  (1) 2024.10.13
[프로그래머스] 짝수와 홀수  (0) 2024.10.13
'여러가지/알고리즘 & 자료구조' 카테고리의 다른 글
  • [프로그래머스] 정수 내림차순으로 배치하기
  • [프로그래머스] 자연수 뒤집어 배열로 만들기
  • [프로그래머스] 약수의 합
  • [프로그래머스] 자릿수 더하기
hyeseong-dev
hyeseong-dev
안녕하세요. 백엔드 개발자 이혜성입니다.
  • hyeseong-dev
    어제 오늘 그리고 내일
    hyeseong-dev
  • 전체
    오늘
    어제
    • 분류 전체보기 (284)
      • 여러가지 (108)
        • 알고리즘 & 자료구조 (72)
        • 오류 (4)
        • 이것저것 (29)
        • 일기 (2)
      • 프레임워크 (39)
        • 자바 스프링 (39)
        • React Native (0)
      • 프로그래밍 언어 (38)
        • 파이썬 (30)
        • 자바 (3)
        • 스프링부트 (5)
      • 운영체제 (0)
      • DB (17)
        • SQL (0)
        • Redis (17)
      • 클라우드 컴퓨팅 (2)
        • 도커 (2)
        • AWS (0)
      • 스케쥴 (65)
        • 세미나 (0)
        • 수료 (0)
        • 스터디 (24)
        • 시험 (41)
      • 트러블슈팅 (1)
      • 자격증 (0)
        • 정보처리기사 (0)
      • 재태크 (5)
        • 암호화폐 (5)
        • 기타 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    항해99
    Redis
    java
    mybatis
    파이썬
    AWS
    #개발자포트폴리오 #개발자이력서 #개발자취업 #개발자취준 #코딩테스트 #항해99 #취리코 #취업리부트코스
    Docker-compose
    백준
    취업리부트
    SAA
    프로그래머스
    WebFlux
    EC2
    DP
    그리디
    Python
    완전탐색
    spring
    reactor
    FastAPI
    OOP
    시험
    자바
    Spring Boot
    RDS
    ecs
    docker
    celery
    Spring WebFlux
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
hyeseong-dev
[프로그래머스] 문자열 내 p와 y의 개수
상단으로

티스토리툴바