[HackerRank] Happy Ladybugs

아르당·2023년 12월 13일
0

HackerRank

목록 보기
45/109
post-thumbnail

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

문제

행복한 무당벌레는 다음 규칙을 따르는 보드게임이다.

  • 그 보드는 길이 n의 문자열 b를 보여준다. 문자열의 i번째 문자인 b[i]는 보드의 i번째 칸을 의미한다.
    • 만약 b[i]가 밑줄(_)이라면 보드의 i번째 칸이 비었다는 것을 의미한다.
    • 만약 b[i]가 영어 알파벳 대문자(ascii[A-Z])라면 i번째 칸은 무당벌레의 색을 포함하는 것을 의미한다.
    • 문자열 b는 다른 문자를 포함하지 않는다.
  • 무당벌레는 왼쪽 또는 오른쪽 칸에 같은 색의 다른 무당벌레가 있을때만 행복하다.
  • 한 번의 이동으로 무당벌레를 아무 빈 칸으로 이동시킬 수 있다.

문자열 b가 주어졌을 때, 모든 무당벌레를 행복하게 만들 수 있는지 판단해라. 모든 무당벌레를 행복하게 만들 수 있다면 YES를 반환해라. 그렇지 않다면 NO를 반환해라.

Example

b = YYR_B_BR

가장 오른쪽에 있는 B와 R을 움직여서 b = YYRRBB__로 만들 수 있고, 모든 무당벌레는 행복하다. YES를 반환한다.

Function Description

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

  • String b: 시작하는 위치와 무당벌레의 색

Return

  • String: YES 또는 NO

Constraints

  • 1 <= g, n <= 100
  • b[i] ∈ {_, ascii[A - Z]}

풀이

문자열 b의 각 무당벌레 마리 수를 구한다.

int[] bugCount = new int[26];

for(int i = 0; i < b.length(); i++){
	if(b.charAt(i) != '_'){
		bugCount[b.charAt(i) - 'A']++;
	}
}

그리고 무당벌레가 단 한 마리인 것을 찾아서 준다.

boolean isOne = false;

for(int bug : bugCount){
	if(bug == 1){
		isOne = true;
		break;
	}
}

무당벌레를 움직일 수 있는지 여부를 판단한다.

boolean isMoved = true;

if(!b.contains("_") && !isOne){
	for(int i = 1; i < b.length() - 1; i++){
		if(
			b.charAt(i) - 'A' != b.charAt(i + 1) - 'A'
			&& b.charAt(i) - 'A' != b.charAt(i - 1) - 'A'
		){
			isMoved = false;
			break;
		}
	}
}

isOne과 isMoved를 이용해 결과값을 반환한다.

if(isOne || !isMoved){
	return "NO";
}

return "YES";

전체 코드

public static String happyLadybugs(String b) {
	int[] bugCount = new int[26];

	for(int i = 0; i < b.length(); i++){
		if(b.charAt(i) != '_'){
			bugCount[b.charAt(i) - 'A']++;
		}
	}

	boolean isOne = false;

	for(int bug : bugCount){
		if(bug == 1){
			isOne = true;
			break;
		}
	}

	boolean isMoved = true;

	if(!b.contains("_") && !isOne){
		for(int i = 1; i < b.length() - 1; i++){
			if(
				b.charAt(i) - 'A' != b.charAt(i + 1) - 'A'
				&& b.charAt(i) - 'A' != b.charAt(i - 1) - 'A'
			){
				isMoved = false;
				break;
			}
		}
	}

	if(isOne || !isMoved){
		return "NO";
	}

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

0개의 댓글