[HackerRank] Mars Exploration

아르당·2024년 1월 2일
0

HackerRank

목록 보기
57/109
post-thumbnail

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

Problem

우주 탐사선이 화성에 불시착했다. 그들은 지구에 도움을 요청하기 위해 SOS 메세지를 연속으로 보낸다.
SOS 메세지에 글자가 전송 중에 우주 방사선 때문에 바꼈다. 지구에 수신된 문자열 s가 주어질 때, 얼마나 많은 SOS 메세지가 방사선에 의해 변경되었는지 결정해라.

Example

s = 'SOSTOT'

최초의 메세지는 SOSSOS였다. 메세지의 두 개의 문자가 바뀌었다.

Function Description

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

  • String s: 지구에 수신한 문자열

Returns

  • int: 전송 중에 바뀐 문자의 수

Constraints

  • 1 <= s의 길이 <= 99
  • s의 길이를 3으로 나눈 나머지는 0
  • s는 오직 ascii[A-Z]의 영어 대문자만 포함한다.

Solved

Sample을 예시를 이해한다면 쉽게 해결할 수 있다. 세 글자씩 잘라서 각 위치에 문자를 비교하면 된다.

변수를 선언하는데 총 4개를 선언한다.

int left = 0;   // 첫번째 글자, S와 비교
int middle = 1; // 두번째 글자, O와 비교
int right = 2;  // 세번째 글자, S와 비교
int count = 0;  // 변경된 글자 수

while문을 통해 right가 총 글자 수가 넘지 않을 때까지 반복하고, 각 문자를 비교해서 count를 증가시킨다. 비교가 끝났다면 비교할 글자 위치를 이동시킨다.

while(right < s.length()){
	if(s.charAt(left) != 'S'){
		count++;
	}

	if(s.charAt(middle) != 'O'){
		count++;
	}

	if(s.charAt(right) != 'S'){
		count++;
	}

	left += 3;
	middle += 3;
	right += 3;
}

마지막으로 count를 반환한다.

return count;

All code

public static int marsExploration(String s) {
	int left = 0;
	int middle = 1;
	int right = 2;
	int count = 0;

	while(right < s.length()){
		if(s.charAt(left) != 'S'){
			count++;
		}

		if(s.charAt(middle) != 'O'){
			count++;
		}

		if(s.charAt(right) != 'S'){
			count++;
		}

		left += 3;
		middle += 3;
		right += 3;
	}

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

0개의 댓글