*문제
*풀이
class Solution {
boolean solution(String s) {
boolean answer;
int p = 0;
int y = 0;
// 1
String[] arr = s.split("");
// 2
for(int i = 0; i < arr.length; i++){
if(arr[i].equals("P") || arr[i].equals("p")){
p++;
} else if(arr[i].equals("Y") || arr[i].equals("y")){
y++;
} else continue;
}
// 3
if(p != y){
answer = false;
} else {
answer = true;
}
return answer;
}
}
- 문자열 s의 단일 문자를 String형의 배열 arr에 담는다.
- 배열의 요소가 p/P일 때와 y/Y일 때 각각 변수 p와 y를 1씩 증가시킨다.
- 여기서 변수 p, y는 각각 문자열 s에 포함된 p/P의 갯수, y/Y의 갯수를 의미한다.
- p(p/P의 갯수)와 y(y/Y의 갯수)가 다르면 false를 같거나 둘 다 아예 없다면 true를 반환한다.
*String[] 배열과 char[]배열
- String[] 배열에는 String형 문자열(" "로 감싸지는 문자열)만 들어갈 수 있다.
- 위 코드에서 s.split()은 받아온 문자열 s를 단일 문자로 배열에 넣는데 어떻게 가능할까?
- split 함수를 사용하여 문자열을 분리할 때는 각 문자가 단일 문자열로 간주되어 배열에 들어간다!
- 위 코드에서 s.split()은 받아온 문자열 s를 단일 문자로 배열에 넣는데 어떻게 가능할까?
- char[] 배열에는 char형 단일 문자(' '로 감싸지는 문자)만 들어갈 수 있다.
✔️다른 풀이
class Solution {
boolean solution(String s) {
s = s.toUpperCase();
return s.chars().filter( e -> 'P'== e).count() == s.chars().filter( e -> 'Y'== e).count();
}
}
- toUpperCase() : 대문자 변환 함수
- chars() : 문자열을 문자단위로 분리하는 함수
- filter(e -> 'P' == e) : 람다식으로 매개변수 e가 'P'와 같을 때
- return값은 문자열의 p갯수와 y갯수가 같은지에 대한 boolean값을 반환
class Solution {
boolean solution(String s) {
s = s.toLowerCase();
int count = 0;
for (int i = 0; i < s.length(); i++) {
if (s.charAt(i) == 'p')
count++;
else if (s.charAt(i) == 'y')
count--;
}
if (count == 0)
return true;
else
return false;
}
}
- toLowerCase() : 소문자로 변환 => 대문자와 소문자 중 하나로 통일시킴
- 변수 count 하나만으로도 풀이 가능
- charAt(i) : 해당 인덱스의 요소 반환
- p와 y의 개수가 같다면 count의 증가값과 감소값이 같음
'코딩테스트' 카테고리의 다른 글
[프로그래머스] - 정수 제곱근 판별 (0) | 2024.01.15 |
---|---|
[프로그래머스] - 자연수 뒤집어 배열로 만들기 (0) | 2024.01.12 |
[프로그래머스] - 자릿수 더하기 (0) | 2024.01.09 |
[프로그래머스] - x만큼 간격이 있는 n개의 숫자 (0) | 2024.01.04 |
[프로그래머스] - 문자열을 정수로 바꾸기 (0) | 2024.01.04 |