본문 바로가기

Algorithm/기타(기업등)

[CodingBat/Java] countXX

728x90

 

링크

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가 가장 적절 

728x90

'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