주간 챌린지: 배열 조작 및 XOR 계산
카테고리
프로그래밍/소프트웨어 개발
서브카테고리
웹 개발
대상자
- 프로그래밍 초보자 및 중급자
- Python/Perl 언어 사용자
- 알고리즘 문제 해결에 관심 있는 개발자
핵심 요약
- 2D 배열 생성: 입력 배열
@ints
를$r
행$c
열의 2D 배열로 변환,len(ints) == rc
조건 검증 ([[ints[i cols + j] for j in range(cols)] for i in range(rows)]
) - 부분집합 XOR 합계 계산:
itertools.combinations
로 모든 부분집합 생성 후 XOR 연산, 최종 합계 계산 (xor_value ^= num
활용) - 언어별 구현 차이: Python은 리스트 컴프리헨션, Perl은
Algorithm::Combinatorics
모듈 사용
섹션별 세부 요약
1. 2D 배열 생성
- 입력 검증: 행/열 수가 0보다 작거나 입력 배열 길이와
r*c
불일치 시ValueError
발생 - Python 구현: 리스트 컴프리헨션으로 2D 배열 생성 (
[[ints[i * cols + j] for j in range(cols)] for i in range(rows)]
) - Perl 구현:
shift @ints
로 데이터 추출,@result
에 행별 배열 저장 - 예제 실행:
./ch-1.py 1 2 3 4 2 2
→[[1, 2], [3, 4]]
2. 부분집합 XOR 계산
- 조합 생성:
itertools.combinations(ints, i)
로i
개 원소의 조합 생성 (i는 1부터 배열 길이까지) - XOR 연산: 각 조합의 원소에 대해
xor_value ^= num
적용 후 합계 누적 - Perl 구현:
Algorithm::Combinatorics
모듈로 조합 생성,map
으로 XOR 계산 - 예제 실행:
./ch-2.py 5 1 6
→28
,./ch-2.py 3 4 5 6 7 8
→480
결론
- 실무 팁: 입력 검증(
len(ints) == r*c
)과 조합 생성(itertools.combinations
)을 반드시 포함 - 성능 고려: 대규모 배열 처리 시
itertools
대신gmpy2
같은 라이브러리 사용 권장 - 핵심 원리: 배열 변환은 인덱싱 전략, XOR 계산은 비트 연산의 특성 활용