[HackerRank] HackerRank in a String!

아르당·2024년 1월 4일
0

HackerRank

목록 보기
60/109
post-thumbnail

문제를 이해하고 있다면 바로 풀이를 보면 됨
전체 코드로 바로 넘어가도 됨
마음대로 번역해서 오역이 있을 수 있음

Problem

만약 일련의 문자열이 "hackerrank" 단어를 철자한다면 문자열이 "hackerrank"를 포함한다고 한다. 서브시퀀스는 시퀀스에서 선택된 문자들의 순서를 유지하는 것을 기억해라.
더 형식적으로 p[0], p[1], ..., p[9]는 문자열 s에 각각 h, a, c, k, e, r, r, a, n, k를 가르킨다. 만약 p[0] < p[1] < p[2] < ... < p[9]가 확실하다면 s는 hackerrank를 포함한다.
각각의 쿼리에 대해, 만약 문자열이 hackerrank를 포함한다면 YES를 출력하고, 그렇지 않으면 NO를 출력해라.

Example

s = haacckkerrannkk
알맞은 정렬에 모든 문자들이 서브시퀀스에 포함한다. YES를 출력한다.

s = haacckkerannk
두 번째 r이 없다. NO를 출력한다.

s = hccaakkerrannkk
c가 아니라 a가 먼저 있어야해서 NO를 출력한다.

Function Description

hackerrankInString 함수를 완성해라.
hackerrankInString 함수는 아래와 같은 매개변수를 가지고 있다.

  • String s: 문자열

Returns

  • String: YES 또는 NO

Constraints

  • 10 <= s의 길이 <= 10^4

Solved

hackerrank의 철자 하나씩 문자열 s에 있는지 확인한다. 비교하면서 순서대로 문자가 존재한다면 hackerrank에서 하나씩 이동시킨다.

먼저 hackerrank를 담을 문자열과 인덱스 0을 변수를 선언하고 할당한다.

String h = "hackerrank";
int hIdx = 0;

for문을 사용해서 문자열 s를 순회한다. 순회하면서 hIdx에 해당하는 문자와 s의 문자가 일치하는지 비교하고 일치한다면 hIdx를 증가시킨다. 그리고 hIdx가 9를 넘게 된다면 순서대로 hackerrank가 존재하기 때문에 반복문에서 빠져나온다.

for(int i = 0; i < s.length(); i++){
	if(s.charAt(i) == h.charAt(hIdx)){
    	hIdx++;
    }
    
    if(hIdx > 9){
    	break;
    }
}

이제 YES 또는 NO를 반환해야하는데, 이때 hIdx가 10보다 작으면 hackerrank가 존재하지 않으므로 NO를 반환하고 아니면 YES를 반환한다.

if(hIdx < 10){
	return "NO";
}

return "YES";

All Code

public static String hackerrankInString(String s) {
	String h = "hackerrank";
	int hIdx = 0;

	for(int i = 0; i < s.length(); i++){
		if(s.charAt(i) == h.charAt(hIdx)){
			hIdx++;
		}

		if(hIdx > 9){
			break;
		}
	}

	if(hIdx < 10){
		return "NO";
	}

	return "YES";
}
profile
내 마음대로 코드 작성하는 세상

0개의 댓글