문제 접근
처음엔 charAt()으로 한 문자씩 잘라서 비교했는데 값이 달라서 나머지 문자들을 다 변경시켜줘야 할 때 나머지 문자들을 다 변경시켜주는 게 바로 안떠올라서 배열로 푸는 쪽으로 변경했다.
++ charAt()으로 그 인덱스에 있는 값을 변경시키려 했더니 좌측에는 변수만 올 수 있다는 에러가 뜨더라
목표 메모리와 초기화된 메모리의 인덱스를 하나씩 비교해가며 다를 경우 횟수 + 1 시키고 초기화 메모리 배열의 해당 인덱스부터 끝까지 다 값을 변경시켜준다.
import java.util.*;
import java.io.*;
public class Solution {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int T = Integer.parseInt(br.readLine()); // 테케
for(int t=1; t<=T; t++) {
String memory = br.readLine();
String[] memoryArr = new String[memory.length()];
String[] initMemoryArr = new String[memory.length()];
int count = 0;
for(int i=0; i<memoryArr.length; i++) {
memoryArr[i] = String.valueOf(memory.charAt(i));
initMemoryArr[i] = "0";
}
for(int i=0; i<memoryArr.length; i++) {
if(!memoryArr[i].equals(initMemoryArr[i])) {
count++;
for(int j=i; j<initMemoryArr.length; j++) initMemoryArr[j] = memoryArr[i];
}
}
System.out.println("#"+t+" "+ count);
}
}
}
다른 사람 풀이
초기값이 모두 0 고정이라 따로 초기화 배열을 만들지 않고 목표 메모리의 배열과 초기값 0을 쭉 비교해가면서 값이 다르면 값을 바꿔서 나머지도 쭉 비교해가는 방식
import java.util.Scanner;
class Solution{
public static void main(String args[]) throws Exception{
Scanner sc = new Scanner(System.in);
int T;
T=sc.nextInt();
for(int test_case = 1; test_case <= T; test_case++){
char[] c = sc.next().toCharArray();
char temp = '0';
int count = 0;
for(int i = 0 ; i < c.length ; i++){
if(c[i] != temp){
temp =c[i];
count ++;
}
}
System.out.println("#"+test_case + " " + count);
}
}
}
'알고리즘 > SWEA' 카테고리의 다른 글
[SWEA / Sum / JAVA] (0) | 2023.05.19 |
---|---|
[SWEA / 회문1 / JAVA] (0) | 2023.05.18 |
[SWEA / 농작물 수확하기 / JAVA] (0) | 2023.05.17 |
[SWEA / N-Queen / JAVA] (0) | 2023.05.16 |
[SWEA / 파리 퇴치 / JAVA] (0) | 2023.05.15 |
댓글