오늘의 학습 키워드
공부한 내용 본인의 언어로 정리하기
import java.util.ArrayList;
import java.util.List;
class Solution {
boolean solution(String s) {
String lowercaseStr = s.toLowerCase();
char[] charArray = lowercaseStr.toCharArray();
List<Character> pList = new ArrayList<>();
List<Character> yList = new ArrayList<>();
for (char c : charArray) {
if (c == 'p') {
pList.add(c);
} else if (c == 'y') {
yList.add(c);
}
}
return pList.size() == yList.size();
}
}
오늘의 회고
오늘 문제는 p
와 y
의 개수를 구하면 되는 문제이다
코드 작성을 하기 전에 어떻게 하면 좋을지 고민했다
입력받은 문자열을 대문자 또는 소문자로 변환을 해주고
문자열을 for문
을 이용해서 배열로 만들어 준 후
전체 배열 내의 p
만 추출해서 또 다른 하나의 배열로 만들고
전체 배열 내의 y
만 추출해서 또 하나의 배열로 만들어 준 후
배열의 길이를 비교해서 같다면 true
틀리다면 false
를 출력하면 되겠다.
문자열의 대문자를 소문자로 변환하는 방법을 까먹어 검색했다
String
을 소문자로 변환하려면 toLowerCase()
를 사용하면 된다고 한다.
class Solution {
boolean solution(String s) {
boolean answer = true;
// 문자열을 소문자로 변환
s = s.toLowerCase();
for문
을 이용한 배열은 1일차 문제에 있었으므로 똑같이 사용하면 된다.
// 문자열을 문자 배열로 변환
char[] charArray = lowercaseStr.toCharArray();
// p와 y를 저장할 리스트 생성
List<Character> pList = new ArrayList<>();
List<Character> yList = new ArrayList<>();
문제는 여기서 였다 하나의 문자만 추출하려 했지만 추가의 과정이 필요했다
전체 배열에서 해당 문자가 있는지 비교한다
해당 p
가 있다면 pList
배열에 y
가 있다면 yList
의 배열에 추가해준다.
// 문자 배열을 순회하며 p와 y 찾기
for (char c : charArray) {
if (c == 'p') {
pList.add(c);
} else if (c == 'y') {
yList.add(c);
}
}
그리고 p
와 y
의 size
가 같다면 true
다르다면 false
를 출력해준다.
// p와 y의 개수(리스트의 길이) 비교
return pList.size() == yList.size();
size()
를 사용한 이유는 문자열이 아니기 때문에 length
를 사용할 수 없기 때문이다.
완성 후에 배열의 size
를 비교 해야한다면 굳이 배열로 만드는 과정이 필요할까 생각했다.
그래서 다시 한개의 답을 더 만들었다.
배열의 길이를 비교해야 한다면, 문자열 내에서 존재하는 특정 문자의 갯수만 가지고 있으면 되지 않을까 생각했다.
그리하여 배열 대신 객체를 만들어주었다.
int pCount = 0;
int yCount = 0;
이렇게 되면 문자열 자체로 배열로 만들 필요가 없어진 것이다.
이제 바로 문자열을 순회하면서 p
와 y
를 찾아 p
가 있다면 pCount
에 1을 더하고 y
가 있다면 yCount
에 1을 더하면 된다.
// 문자열을 순회하며 'p'와 'y'의 개수를 세기
for (char c : s.toCharArray()) {
if (c == 'p') {
pCount++;
} else if (c == 'y') {
yCount++;
}
}
전체를 순회하면 되기때문에 forEach문
을 사용하였고 s
문자열을 문자 배열로 전환해 각 문자가 c
와 대입하게 된다.
그래서 배열속의 문자를 순회중 p
가 있으면 pCount
의 값에 +1을 y
가 있으면 yCount
의 값에 +1을 해주게 된다.
이제 마지막으로 pCount
와 yCount
를 비교해서 리턴해주면 된다.
이렇게 하면 pCount == yCount
라면 true
를 pCount != yCount
라면 false
를 return
해주게 된다.
return pCount == yCount;
전체 코드는 이렇다
class Solution {
boolean solution(String s) {
// 문자열을 소문자로 변환
s = s.toLowerCase();
int pCount = 0;
int yCount = 0;
// 문자열을 순회하며 'p'와 'y'의 개수를 세기
for (char c : s.toCharArray()) {
if (c == 'p') {
pCount++;
} else if (c == 'y') {
yCount++;
}
}
// 'p'와 'y'의 개수 비교
return pCount == yCount;
}
}
문제
https://school.programmers.co.kr/learn/courses/30/lessons/12916