링크
https://codingbat.com/prob/p194667
CodingBat Java Warmup-2 countXX
Count the number of "xx" in the given string. We'll say that overlapping is allowed, so "xxx" contains 2 "xx".
codingbat.com
문제
주어지는 문자열에 "xx"가 몇번 등장하는지 반환하는 함수를 작성하자.
풀이
for문을 이용해, substring으로 2자씩 조회하면서, xx와 같은지 확인하자.
point : 문자열을 비교하는 여러가지 방법
- equals
- compareTo
- ==
equals
보통 자바에서 문자열을 비교하면, equals를 주로 사용한다.
객체의 순서를 바꿔도 결과는 동일하다.
int countXX(String str) {
int cnt = 0;
for(int i=0; i<str.length()-1; i++){
if(str.substring(i,i+2).equals("xx"))
cnt++;
}
return cnt;
}
모든 객체의 부모 클래스인 Object에 정의되어 있는 메소드이다.
String 클래스가 이를 오버라이드 해서 사용한다.
이는 객체 비교 메소드로, 두 객체의 "값"이 같은지 확인한다.
==
항등 연산자이다.
사실 이로 문자열을 비교하면 안된다.
== 는 객체가 같은지 비교하는 것이지, 객체가 가진 문자열을 비교하는 것이 아니다.
즉, 같은 객체를 가리켜야(두 객체가 같은 메모리 공간을 가리키는지 확인한다)
String str1 = "Hello";
String str2 = "Hello";
String str3 = new String("Hello");
System.out.println("str1 == str2 ? " + (str1 == str2)); // true -> 두 변수는 동일한 문자열을 가리킴
System.out.println("str1 == str3 ? " + (str1 == str3)); // false -> str3는 new String으로 새로 만들어진 객체
compareTo
compareTo()는 두개의 문자열을 비교한다.
equals와는 다르게, 어떤 문자가 (사전순)으로 앞에 있는지를 함께 리턴해준다.
Returns를 읽어보면,
- 0 : 두 문자열이 동일한 경우
- 양수 : 호출 객체가 인자보다 사전적 순서로 t앞설 때
- 음수 : 인자가 객체보다 사전적으로 순서가 앞설 때
추가) 대소문자를 신경쓰지 않고 비교하는 메소드인 compareToIgnoreCase()가 존재한다.
결론적으로는 여기서는 equals가 가장 적절
'Algorithm > 기타(기업등)' 카테고리의 다른 글
[CodingBat/java] makeChocolate (0) | 2021.10.07 |
---|---|
[CodingBat/java] luckySum (0) | 2021.10.07 |
[CodingBat/Java] front22 (0) | 2021.09.30 |
[CodingBat/Java] missingChar (0) | 2021.09.24 |
[SAP/C++] BST from postorder (0) | 2021.04.24 |