공부하기/백준

[Java] 백준 풀기 4597 - 패리티

XEV 2023. 8. 12. 23:52

자바 백준 4597번

브론즈 2

https://www.acmicpc.net/problem/4597

 

4597번: 패리티

입력은 여러 개의 비트 스트링으로 이루어져 있다. 각 비트 스트링은 한 줄로 이루어져 있고, 길이는 1~31비트이다. 또, 비트 스트링의 마지막 문자는 e 또는 o이다. (e: 짝수 패리티, o: 홀수 패리티

www.acmicpc.net

 

 

 

 

 

문제 보기

분류: 구현, 문자열

 

 

 

 

 

문제 풀기

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;
    }
    
}