문제 설명
주어진 문자열 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
코드 설명
s.lower()
를 통해 문자열s
를 모두 소문자로 변환합니다.- 이렇게 하면 대소문자를 구분하지 않고 비교할 수 있습니다.
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
}
}
코드 설명
s.toLowerCase()
를 사용하여 문자열을 모두 소문자로 변환합니다.- 이렇게 하면 대소문자를 구분하지 않고 비교할 수 있습니다.
pCount
와yCount
를 사용하여'p'
와'y'
의 개수를 세고, 문자열을 순회하면서 해당 문자가'p'
이면pCount
를 증가시키고,'y'
이면yCount
를 증가시킵니다.- 최종적으로
'p'
와'y'
의 개수가 같으면true
, 다르면false
를 반환합니다.
3. 시간 복잡도 분석
- 시간 복잡도: 문자열의 길이가
n
일 때, 문자열을 한 번 순회하면서'p'
와'y'
의 개수를 세므로, 시간 복잡도는 O(n)입니다.- Python에서는
s.count()
함수도 내부적으로 문자열을 한 번 순회하기 때문에 O(n)입니다.
- Python에서는
결론
이 문제는 문자열을 대소문자 구분 없이 특정 문자의 개수를 세고 비교하는 문제로, lower()
또는 toLowerCase()
와 같은 메서드를 활용하여 간단하게 해결할 수 있습니다. 시간 복잡도는 O(n)으로, 주어진 제한 내에서 매우 효율적으로 처리할 수 있습니다.
'여러가지 > 알고리즘 & 자료구조' 카테고리의 다른 글
[프로그래머스] 정수 내림차순으로 배치하기 (0) | 2024.10.14 |
---|---|
[프로그래머스] 자연수 뒤집어 배열로 만들기 (0) | 2024.10.14 |
[프로그래머스] 약수의 합 (0) | 2024.10.13 |
[프로그래머스] 자릿수 더하기 (0) | 2024.10.13 |
[프로그래머스] 짝수와 홀수 (0) | 2024.10.13 |