Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- Sparkfun Edge Example
- Sparkfun Edge 프로젝트
- c언어 지역변수
- GStreamer 튜토리얼
- 성적평균
- Spakrfun Edge
- C++
- 삼성 B형
- c언어 라이프타임
- c언어 스코프
- c언어 전역변수
- c언어 정적변수
- 플레이페어 암호
- Python
- GStreamer
- C++해설
- GStreamer tutorial
- 수퍼컴퓨터 클러스터
- 사물인식 최소 면적 산출 프로그램
- SKT FLYAI
- 코딩테스트 기출
- 통근버스 출발 순서 검증하기
- 코테기출
- softeer
- 소프티어
- MacOS 설치
- 삼성전자 #영상디스플레이사업부 # VD사업부 #면접후기
- 지도 자동 구축
- c언어 static
- nodejs 기초
Archives
- Today
- Total
mulll
[소프티어] 전광판 / C++ 해설 본문
더 많은 문제풀이는 아래 Github 주소에서 확인하실 수 있습니다.
https://github.com/Dongha-k/softeer-code
문제 출처: https://softeer.ai/practice/info.do?idx=1&eid=624
#include <iostream>
#include <string>
using namespace std;
unsigned char segment[11] = {
0b11111100,
0b01100000,
0b11011010,
0b11110010,
0b01100110,
0b10110110,
0b10111110,
0b11100100,
0b11111110,
0b11110110,
0b00000000
};
int get_bit_count(unsigned char c){
int cnt = 0;
for(int i = 0 ; i < 8 ; i ++){
if( ( (c & (1 << i) ) >> i) == 1) cnt ++;
}
return cnt;
}
int get_diff(int a, int b){
unsigned char res = segment[a]^segment[b];
return get_bit_count(res);
}
int main(int argc, char** argv)
{
int n;
cin >> n;
for(int i = 0 ; i < n ; i ++){
int res = 0;
string a, b;
cin >> a >> b;
if(a.size() > b.size()){
int len = a.size() - b.size();
for(int i = 0 ; i < len ; i ++){
b = (char)('0' + 10) + b;
}
}
else {
int len = b.size() - a.size();
for(int i = 0 ; i < len ; i ++){
a = (char)('0' + 10) + a;
}
}
for(int i = 0 ; i < b.size() ; i ++){
res += get_diff(a[i] - '0', b[i] - '0');
}
cout << res << '\n';
}
return 0;
}
해설: 비트연산 사용
a와 b를 입력받아 빈 칸(segment에서는 10번째 인덱스에 해당)으로 값을 채워줘서 길이를 같게 하였고 a와 b의 다른 비트의 숫자를 계산하기 위해 xor연산을 먼저하였다. 1인 비트의 자리는 a 와 b가 서로 비트가 다르다는 뜻이고 0 인 경우는 a 와 b가 서로 비트가 같다는 뜻이다. xor 연산 결과에서 이진수에서 1의 갯수를 세는 함수를 만들어 1의 갯수를 리턴하도록 했다. 그러면 한 자리당 필요한 스위치 동작 횟수를 구할 수 있다.
'algorithm study' 카테고리의 다른 글
[소프티어] 금고털이 / C++ 해설 / Python 해설 (0) | 2023.01.05 |
---|---|
[소프티어] 8단 변속기 / C++ 해설 (0) | 2023.01.01 |
[소프티어] 지도 자동 구축 / C++ 해설 (0) | 2023.01.01 |
[소프티어] 사물인식 최소 면적 산출 프로그램 / C++ (1) | 2023.01.01 |
[소프티어] 교차로 / C++ 해설 (0) | 2023.01.01 |
Comments