자바 백준 4597번
브론즈 2
https://www.acmicpc.net/problem/4597
문제 보기
분류: 구현, 문자열
문제 풀기
1의 개수를 세어서 짝수개인지 홀수개인지 찾고, 각각 마지막 패리티와 비교하여 일치하는지 확인한다. 일치할 경우 마지막 패리티 자리에 `0`으로 교체하여 출력하고 일치하지 않으면 `1`로 교체하여 출력한다.
한 줄로 입력된 문자는 charAt() 함수를 이용하여 parity 및 1을 구분한다.
코드 보기
import java.util.Scanner;
public class Main {
public static void main(String args[]) {
Scanner sc = new Scanner(System.in);
while(true) {
String bitString = sc.next();
// '#' 입력 시 프로그램 종료
if (bitString.equals("#")) break;
// 수정할 마지막 비트 찾기
char correctedBit = correctLastBit(bitString);
// 마지막 비트를 올바르게 수정하여 출력
System.out.println(bitString.substring(0, bitString.length() - 1) + correctedBit);
}
}
// 마지막 비트를 올바르게 수정하는 함수
static char correctLastBit(String bitString) {
// 마지막 비트의 패리티 가져오기
char parity = bitString.charAt(bitString.length() - 1);
// 비트 스트링에서 1의 개수 계산
int countOnes = countOnes(bitString);
// 현재 패리티와 1의 개수를 비교하여 마지막 비트를 결정
if ((countOnes % 2 == 0 && parity == 'e') || (countOnes % 2 == 1 && parity == 'o')) {
// 1의 개수와 패리티가 일치하면 마지막 비트를 0으로 설정
return '0';
} else {
// 1의 개수와 패리티가 일치하지 않으면 마지막 비트를 1로 설정
return '1';
}
}
// 비트 스트링에서 1의 개수를 세는 함수
static int countOnes(String bitString) {
int count = 0;
// 마지막 비트를 제외하고 순회 하여 1의 개수 카운트
for (int i = 0; i < bitString.length() - 1; i++) {
if (bitString.charAt(i) == '1') {
count++;
}
}
return count;
}
}
'공부하기 > 백준' 카테고리의 다른 글
[Java] 백준 풀기 10610 - 30 (0) | 2023.08.14 |
---|---|
[Java] 백준 풀기 10162 - 전자레인지 (0) | 2023.08.13 |
[Java] 백준 풀기 3273 - 두 수의 합 (0) | 2023.08.11 |
[Java] 백준 풀기 21921 - 블로그 (0) | 2023.08.09 |
[Java] 백준 풀기 11005 - 진법 변환 2 (0) | 2023.08.08 |