티스토리 뷰
문제 설명
대문자와 소문자가 섞여있는 문자열 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 |
- 처음 나의 풀이
class Solution {
boolean solution(String s) {
boolean answer = true;
s = s.toUpperCase(); //문자열을 대문자로 세팅
String[] arr;
arr = s.split("");//문자열의 요소를 하나하나 넣어줄 배열 만들고
int cntP = 0;
int cntY = 0; //y와 p의 대수를 count할 변수 만들어주고
for (int i = 0; i<s.length(); i++){ //요소를 하나하나 비교하여 p값과 y값 카운팅
if (arr[i] == "P"){ <- 이 부분이 정확하게 넘어가지 않음. (A.equals(B))를 사용해야함.
cntP = cntP + 1;
}
else if (arr[i] =="Y"){
cntY = cntY + 1;
}
}
if (cntP == cntY){
answer = true;
}
return answer;
}
}
- 문자열을 split("")로 쪼개서 String 배열에 담음
- 배열에 담은 후 문자열을 ==로 비교하려 했지만 코드가 정상적으로 실행되지 않음. (==는 주소값을 비교하는 연산자이고, String은 각자 고유의 주소값을 갖고 있기 때문에, 같은 값을 지니고 있더라도, == 연산자로 비교 했을 경우 false가 출력된다.따라서 String의 '값'을 비교하기 위해서는 equals()함수를 사용해야 한다.)
- ==와 equals의 차이 : A == B는 A와 B의 주소값을 비교, A.equals(B)는 A와 B의 값 자체를 비교. 참조사이트 (https://stackoverflow.com/questions/513832/how-do-i-compare-strings-in-java, https://ojava.tistory.com/15)
- 최적의 코드
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--;
}
return count == 0;
}
}
- s.charAt를 사용하여, 내풀이에서 했던 split을 실행하지 않고 바로 String값으로 비교가 가능하다
- '같으면 true, 다르면 false'를 하나의 코드로 구체화하여 p와 y에 대한 각각의 변수 없이 한개의 count변수 사용.
- return도 if문을 사용할 필요 없이 훨씬 간결하게 표현
*필요한 개념(복습해야할 개념)
- String.charAt(index) : String에서 index에 해당하는 문자를 반환함
String "abcdef";
char ch = String.charAt(3);
System.out.println(ch) // 'd' 출력
- == 와 equals()의 차이 : == String을 참조하는 변수의 주소 값을 비교하고, A.equals(B)는 참조변수 A와 B가 힙메모리 영역에서 가르키는 문자열 값을 비교한다.
- CBR, CBV
'Algorithm > Algorithm Practice' 카테고리의 다른 글
3. 버블정렬 bubble sort (Java) (0) | 2020.02.25 |
---|---|
1. 시간복잡도 (영리한 프로그래밍을 위한 알고리즘 강좌) (0) | 2020.02.25 |
프로그래머스 -3 가운데 글자 가져오기(Java) (0) | 2020.02.16 |
프로그래머스 -2 약수의 합(Java) (0) | 2020.02.16 |
동적계획법 (Dynamic Programming) (0) | 2020.01.30 |
- 20200421
- 20200504
- 20200319
- 20200424
- 20200804
- 20200317
- 20200622
- 20200512
- 20200417
- 생활코딩리눅스
- chapter8
- 20200330
- 20200503
- chapter7
- 20200423
- 20200427
- 20200624
- 20200502
- 20200420
- 20200429
- 백준
- 20200413
- 20200403
- 20200406
- 20200428
- 20200510
- 20201204
- 20200425
- 20200415
- likelion
- Total
- Today
- Yesterday