컴공 일기264
10진수(decimal)를 2진수로 변환하는 알고리즘입니다.
주로, stack을 이용해서 구현하지요.
20을 2진수로 구현하는 방식은 다음과 같습니다.
20 / 2 = 10 …0
10 / 2 = 5 … 0
5 / 2 = 2 … 1
2 / 2 = 1 … 0
1 / 2 = 0 … 1
몫이 0이 될 때 까지 나누고, 나머지를 밑에서부터 출력하면
10100이 되지요.
이 과정을 표현하기에 적합한 자료구조가 stack입니다.
제일 먼저 2로 나눈 수는 20이지만, 20을 2로 나눈 나머지가 제일 마지막에 출력 되어야 하죠.
말하자면, 나눈 순서와 나머지를 출력하는 순서가 거꾸로 뒤집힌 상황입니다.
그러니까, 1이 제일 마지막으로 2로 나누어졌지만, 이 결과로 얻어진 나머지가 우선적으로 출력이 되죠.
다시 말해, First in - Last out을 만족하는 stack구조가 적합하다는 판단을 내릴 수 있죠.
제일 첫번째로 입력된 데이터가 마지막에 출력된다.
도출 과정을 글로 요약해보면 이렇습니다.
1. “해당 수를 나눈 몫이 0이 될 때까지 2로 나눈다”
2. “나눌 때 마다 얻게 된 나머지를 스택에 집어 넣는다”
3. “스택의 데이터가 모두 없어질 때까지 출력한다”
조금 다른 감이 없지 않아 있습니다만, 실제 알고리즘을 구현할 때
이런 식으로 간단히 의사를 정리해두는 코드를 Pseudo code(의사 코드)라고도 합니다.
개인적인 견해로, 이런 예시로 보면 알 수 있듯이 코딩은 절차적인 글쓰기입니다.
시제를 넘나드는 OOP로 넘어가면 얘기가 조금 달라지지만, 근본이 이렇죠.
#include <iostream>
#include <string>
#include <stack>
using namespace std;
stack<char> st;
int main()
{
int num;
cin >> num;
//해당 수를 나눈 몫이 0이 될 때까지 2로 나눈다
while(num > 0)
{
int ret = num % 2;
char res = '0' + ret;
//나눌 때마다 얻게 된 나머지를 스택에 집어 넣는다
st.push(res);
num /= 2;
}
//스택의 데이터가 모두 없어질 때까지 출력한다
string result = "";
while(!st.empty())
{
result += st.top();
st.pop();
}
cout << result << endl;
}
0 XDK (+0)
유익한 글을 읽었다면 작성자에게 XDK를 선물하세요.
-
약대라서 다행이다 넌 의대로 반수해라
-
컴활 2급 0
이거 다 외워야해여?
-
ㄹㅇ재밌을듯…
-
메가패스 하나 사기도 눈치 보이네 어짜피 결국 살거 빨리 사는게 이득인데 쉽지않음
-
그 자동차 회사 공식 정비소? 이런 곳 가셨는데 정비하시는 분들이 죄다 키 크고...
-
뜌땨땨 하면서 존나박음…
-
스스로 자잖아... 난 가만히 있었다고.............
-
지구가 천구적도와 나란한 방향으로 회전하기에 북반구 중위도에서는 천체가 동에서 떠서...
-
2025수능 미적분 68 4등급뜨고 재수합니다 제 수준에 개념강의 어떤 분 강의가...
-
시간 어느 정도 걸리시나요? 난이도는 평균이라고 잡았을 때 궁금합니다!
-
김범준 듣는애들 0
무슨 단원이 가장 도움됨?
-
ㅁㅌㅊ
-
예비 고3이고, 문학을 감으로 푸는 감이 있어서 확실히 하고자 김재훈 쌤 문학 특강...
-
여초회사에서 일하지 마라
-
벡터에서 1차 위기와서 4주정도 쉬고 극복했었는데 이제 공간 들어가니 벡터보다 더...
-
실검에 약속의 있던데 여긴 어디에 있는 의대인가요?
-
ㅇㅈ 6
-
진짜 그런가요? 듣기론 남자는 본인 엄마 닮은 여성을 데려 온다는데
-
입결상으로 어디가 높나요?
-
제발좀 안했으면 좋겠음 진짜로
-
4임 시발점은 들음요
-
하트젤리..ㅋㅋㅋㅋ 귀엽네
-
한양대 합격생을 위한 노크선배 꿀팁 [한양대25] [무료인강 혜택] 1
대학커뮤니티 노크에서 선발한 한양대 선배가 오르비에 있는 예비 한양대학생, 한양대...
-
해본 사람만 투표
-
ㅈㄱㄴ
-
이거 괜찮나.
-
기만질만 하면 됨
-
ㅠㅠㅠㅠㅠㅠㅠㅠ
-
공군 6월로간다 8
한학기 다니고 6월로가야지 6월 64 99면 붙겠지…
-
라식라섹하면난시교정되냐난시는진짜어떻게해야함
-
미적 대비 양이 작다 타선택과목 대비 전체적인 컨텐츠가 적다(오히려 n수와의...
-
3월까지 얼만큼 5
화작 기하에 투과목 두 개 보려고 하는 틀딱입니다. 영어는 공부 안 해도 고정...
-
다들 기피하네
-
이게 말이되누 ㅠㅠ 16시 퇴근인디 19시에야 퇴근함 ㅠㅠ 일하기 싫다 싫어 ㅠㅠ
-
예쁘긴 하네 9
-
하원버튼이 안눌려서 그냥 왔는데 ㄱㅊ겠지..? 아 그리고 조퇴하고 병원안가면 벌점 커?
-
저두 이 쌤한태 국어 배우고 십퍼요
-
솔직히 전공의 의대생 안돌아온다고 정부가 아쉬울건 없어서 1
환자 줄고 수술 줄고 응급실 뺑뺑이 해도 여전히 기득권은 빅5 프리패스고 의료접근성...
-
1분 뒤면 4
티켓팅 열리는데 난 티켓 살 돈이 업서 아 7시 됐네
-
죽고싶다…진짜 비참하다
-
국민대 러시아 0
쓴사람 말좀
-
평가원 시험 정상화 됐다고봄? 과정에 문제가 있었다고해도 결론만 놓고보면
-
시간은 15시 전후
-
이라는 친구가 있는데 국어 황이라서 중 3때 다 풀었고 모고는 96점 이하를 받은...
-
모의고사 등급컷, 표점 16
어디서 볼 수 잇나요
와 이런 거 너무 좋은 거 같아요
:)
아 저도 코딩 공부하고 싶네요..나중에 원하는 학과 입학하면 이런 거 연재해보겠습니다
화이팅이에용!
님 코딩 문제 풀때 보면 바로 알고리즘짤때 뭐써야하는지 떠오르나요?
사실 난이도가 올라가면 올라갈수록, 시간이 걸리긴 합니다.
코딩테스트 한정해서 말씀드리면, 빈출 알고리즘(dp, greedy, knapsack, graph …)이라는 게 존재해서
유형을 반복적으로 접하다 보면 알 수 있죠.
생전 처음 보는 문제는 저도 버겁습니다.
답보면 맥락은 이해가 가는데 문제만 보고 이걸 떠올리는게 많이 빡세더라고요
경험 부족인 거죠. 그래서 가급적이면 유형 별 문제풀이가 도움이 될 때가 많아요.
오늘은 배낭문제, 내일은 dp, 모레는 greedy… 이런 식으로 유형 별로 반복을 하면서 연차가 쌓이면
“자기 주관”이 생기게 마련일 거예요.
자고로, 저도 그런 경험을 지금까지도 너무 많이 겪고 있는 중입니다.