대문자와 소문자가 섞여있는 문자열 s가 주어질때, s에 'p'의 개수와 'y'의 개수를 비교해 같으면 True, 다르면 False를 return 하는 solution을 구축
나의 전략은 아래와 같았다:
- String s를 for문을 두번 돌려서, if문으로 "p" || "P"가 없으면 "true", 그리고 그 안에 또 다른 if문을 넣어 "y" || "Y"가 없으면 "true"로 p나 y가 있는지 확인
- 만약 없을 경우 "p"는 countP++ 값으로, "y"는 countY++ 값으로 넣기
- if 문을 사용하여 countP == countY 일 경우 true, 아닐 경우 false
위의 전략대로 아래와 같이 코드를 구현해 보았다.
class Solution {
boolean solution(String s) {
int countY = 0;
int countP = 0;
for(int i = 0; i < s.length(); i++) {
for (int j = 0; j < s.length(); j++) {
if (s[i] != "p" || "P") {
if (s[i] != "y" || "Y");
countP = 0;
} else if (s[i] == "p" || "P"){
countP++;
} else {
countY++;
}
}
}
boolean a;
if (countP == countY){
a = true;
} else {
a= false;
}
return a;
}
}
하지만 for문 안에 있는 if문의 s에 자꾸 에러가 떴다. 그리고 코드를 전체적으로 봤을때, 반복적으로 진행되는 부분이 많아보여 줄일 수 있다고 생각도 들었지만, 일단은 내가 짠 전략대로 작성해보기로 했다. 하지만 저 상태로 돌리게되면 java: array required, but java.lang.String found이라는 문구가 나왔다.
나의 전략을 사용하기 위해선 아래와 같이 코드 작성이 필요했다.
class Solution {
boolean solution(String s) {
int countY = 0;
int countP = 0;
for(int i = 0; i < s.length(); i++) {
for (int j = 0; j < s.length(); j++) {
if (s.charAt(i) == 'p' || s.charAt(i) == 'P') {
countP++;
} else if (s.charAt(i) == 'y' || s.charAt(i) == 'Y'){
countY++;
}
}
}
boolean a;
if (countP == countY){
a = true;
} else {
a= false;
}
return a;
}
}
해당 알고리즘을 풀면서 가장크게 두가지를 배웠다:
- "" & '' - character 하나만을 나타내고 싶을 경우에는 ""이 아닌 ''을 사용해야 하며, ""의 경우 string에 사용
- || - OR operator 사용할 경우 s[i] != "p" || "P" 해당문구는 항상 true일 것이다. 그러므로 (어차피 틀린거지만 만약 사용한다고 할땐) s[i] != "p" || s[i] != "P" 라고 각각 명시해 줘야함
- charAt - String과 character는 비교할 수 없는 대상이기에 s[i]로 했을 때 오류가 났음. character과 String을 비교할 경우 꼭 charAt 사용 필수!
- boolean - 처음에 코드를 작성하였을 때 a 값을 boolean에서 바로 줌
if (countP == countY){ boolean a = true; } else { boolean a= false; } return a;
하지만 곧 boolean a; 를 앞에 먼저 명시해줘야 하는 것이 생각나 아래 부분은 변경함
이미 알고 있던 개념들이였어도, 막상 실제로 코드를 짤 때에는 어떻게 작용하는지 아직 잘 모르는 것 같다. 개념들을 조금 더 자세히 이해하기 위해 자료구조, 기본적인 operator등을 더 공부해야겠다.