문제 설명
대문자와 소문자가 섞여있는 문자열 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 합니다.
※ 공지 - 2021년 8월 23일 테스트케이스가 추가되었습니다.
내 풀이
총 걸린 시간 12분 36초
class Solution {
boolean solution(String s) {
int p = 0;
int y = 0;
int len = s.length();
s = s.toLowerCase();
for(int i=0; i<len; i++){
char c = s.charAt(i);
if(c=='p'){
p++;
}else if(c=='y'){
y++;
}
}
return p == y;
}
}
대소문자 구분이 없다고 했기 때문에 toLowerCase() 메서드를 사용해 문자열을 소문자로 통일했다.
p의 개수, y의 개수를 저장하는 변수를 각각 선언해서 if 문에 활용했다.
p==y의 결과는 True, False 둘 중 하나로 반환된다.
여기서 주의해야할 것은 괜히 if 문을 길게 써서 p, y의 개수가 같을 때, 둘 다 0일 때, 다를 때를 따질 필요없다.
둘 다 0이라는 건 어차피 둘의 개수가 같다는 걸 의미하기 때문에 return p == y; 로 간단하게 표현할 수 있다.
오늘의 학습 키워드 : String 접근 방식
String은 불변객체(immutable)이다 → 배열에 인덱스로 접근하는 것처럼 할 수 없다.
- String buffer는 mutable object이다.
- toCharArray() 메서드로 char 배열로 바꾸면 자바에서도 인덱스 접근이 가능하다.
- charAt() 메서드를 사용하면 해당 인덱스의 위치에 있는 문자를 가져올 수 있다.
String s = "Hello";
char ch = s.charAt(1); //e
System.out.println(ch);
그렇다면 코틀린은?
코틀린은 String에 배열처럼 접근할 수 있다.
val s = "Hello"
val ch = s[1] //e
val ch2 = s.get(1) //e
- 대괄호로 접근
- get() 메서드로 접근
→ 두 가지 접근 모두 동일한 방식이다.
코틀린으로도 이 문제를 풀어보자.. 이 문제에서는 지원 안 하는 언어라 kotlin playground를 사용했다.
다른 풀이들을 참고해서 나도 람다를 써보려고했는데 굳이 filter를 사용하지 않아도 kotlin에는 count{} 라는 훌륭한 고차함수가 존재했다.
참고 : length와 length()의 차이?
코틀린 쓰다가 자바를 쓰면 항상 length의 괄호 유무로 혼란이 왔다. gpt에게 물어보니 둘의 차이는 속성과 메서드 여부였다.
length는 속성(property)이다. length() 는 메서드(method)로, 연산 결과를 반환한다.
kotlin은 속성 기반 접근을 선호하는 언어이다.
문자열 길이를 알고 싶을 때는 length, Array나 ArrayList에서는 size를 사용한다.
다른 풀이들
람다로 filter 사용하는 방법, count 변수 하나로 p면 더하고, y면 빼서 return count == 0;으로 변수를 굳이 두 개 쓰지 않고도 구하는 방법.. 대단한 사람들 많다..
'코딩테스트' 카테고리의 다른 글
99클럽 코테 스터디 4일차 TIL : reverse() (0) | 2025.01.16 |
---|---|
99클럽 코테 스터디 3일차 TIL : StringBuilder (0) | 2025.01.16 |
99클럽 코테 스터디 2일차 TIL : Scanner와 BufferedReader (0) | 2025.01.15 |
백준 2일차 - 2840번 (0) | 2022.07.05 |
백준 1일차 - 14681번, 2884번, 2525번 (0) | 2022.07.04 |