문제
풀이
일일히 한 원소씩 토글하여 풀었음
하지만 이렇게 풀면 배열의 길이가 길어질 수록 매우 비효율적인 풀이방법임.
위의 방법과 다르게 왼쪽부터 배열원소를 탐색하면서 처음에는 0을 탐색하고 0값과 다른값이 나오면 카운트를 증가하고 1을 다시 탐색하여 토글하는 방법으로 검사하는 것이 더 빠름.
비 효율적인 풀이 (하나씩 원소를 변경)
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.stream.Stream;
public class SWEA_1289 {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int t = Integer.parseInt(br.readLine());
for(int tc = 1; tc <=t; tc++) {
String inputData = br.readLine();
int[] nums = Stream.of(inputData.split("")).mapToInt(Integer::parseInt).toArray();
int ans = 0;
for (int i = 0; i < nums.length; i++) {
int temp = nums[i];
if(temp == 1) {
nums[i] = 0;
for(int j = i; j<nums.length; j++ ) {
if(nums[j] == 1) nums[j] = 0;
else nums[j] = 1;
}
ans += 1;
}
}
System.out.printf("#%d %d\n", tc, ans);
}
}
}
효율적인 풀이 (토글방식)
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.stream.Stream;
public class SWEA_1289 {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int t = Integer.parseInt(br.readLine());
for(int tc = 1; tc <=t; tc++) {
String inputData = br.readLine();
int[] nums = Stream.of(inputData.split("")).mapToInt(Integer::parseInt).toArray();
String[] inputStr = br.readLine().split("");
int[] inputInt = new int[inputStr.lenght]
for(int i = 0; i < inputStr.length; i++){
inputInt[i] = Integer.parseInt(inputStr[i]);
}
int ans = 0;
int temp = 0;
for(int j = 0; j < nums.length; j++ ) {
if(nums[j] != temp) {
temp = nums[j];
ans++;
}
}
System.out.printf("#%d %d\n", tc, ans);
}
}
}
'Problem Solving > CT-Java' 카테고리의 다른 글
[백준/BFS] 2206: 벽 부수고 이동하기 - 자바 (0) | 2022.08.27 |
---|---|
[백준/BFS] 3055: 탈출 - 자바 (0) | 2022.08.27 |
[백준/구현] 1244: 스위치 켜고 끄기 (0) | 2022.08.22 |
[백준/BFS] 1697: 숨바꼭질 - 자바 (0) | 2022.08.22 |
[백준/구현] 17135: 캐슬디펜스 - 자바 (0) | 2022.08.22 |