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 |
Tags
- 오블완
- DFS
- 에라토스테네스의 체
- 유클리드호제법
- 그래프
- 깊이우선탐색
- stoi
- Sort
- Set
- N과M
- map
- priority_queue
- DP
- 배열
- 프로그래머스
- 최소공배수
- int
- 티스토리챌린지
- 백트래킹
- 문자열
- BFS
- 알고리즘
- 분할정복
- C++
- 정렬
- 다이나믹프로그래밍
- 우선순위큐
- 백준
- vector
- 이분탐색
Archives
- Today
- Total
안녕 세상아,
[프로그래머스/c++] Lv2 이진 변환 반복하기 본문
https://school.programmers.co.kr/learn/courses/30/lessons/70129
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
처음으로 챗지피티씨를 사용해서 풀어보았다..ㅋㅋ
분명 내가 한게 맞다고 생각했는데 하나씩 자꾸 틀리길래..
근데 진짜 좋은게 내가 어디가 잘못됐고 뭐가 문제인지 자세히 알려주고 다른 방법으로도 알려주고,,역시 챗지피티는 천재야
암튼 푼 방법
1. 우선 숫자를 2진수로 바꿔주기 위해 함수를 따로 만든다.
1-1. n이 0일 경우 예외를 둬서 예외처리를 해준다.
1-2. n이 0이 될때까지 나머지를 더하고 2로 나누게 된다.
1-3. 반대로 더해졌기 때문에 reverse문을 사용한다. (algorithm 헤더 필요)
2. s가 "1"이 될 때까지 while문을 돌린다.
3. 0을 지워야하기 때문에 0을 만나면 answer[1]++ 해주고 erase를 사용하여 지워준다.
3-1. erase를 하면 문자 하나가 없어지기 때문에 i-- 를 해준다.
4. 0이 아니면 continue (안해도됨)
5. 0을 지운 후 길이를 측정하고 1에서 만들어둔 change 함수에 넣어서 2진수로 만든다.
6. change 함수에 넣을 때마다 answer[0]++ 해준다.
끝!
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
string change(int n){
if(n==0)
return "0";
string bit="";
while(n != 0){
bit += to_string(n % 2);
n = n / 2;
}
reverse(bit.begin(),bit.end());
return bit;
}
vector<int> solution(string s) {
vector<int> answer(2,0);
while(s != "1"){
for(int i=0; i<s.size(); i++){
if(s[i] == '0'){
answer[1]++;
s.erase(i,1);
i--;
}
else
continue;
}
int x = s.length();
s = change(x);
answer[0]++;
}
return answer;
}
'프로그래머스' 카테고리의 다른 글
[프로그래머스/c++] Lv1 3진법 뒤집기 (0) | 2024.08.21 |
---|---|
[프로그래머스/c++] Lv1 예산 (0) | 2024.08.21 |
[프로그래머스/c++] Lv1 같은 숫자는 싫어 (0) | 2024.08.20 |
[프로그래머스/c++] LV2 JadenCase 문자열 만들기 (0) | 2024.08.15 |
[프로그래머스/c++] Lv1 최대공약수와 최소공배수 (0) | 2024.08.15 |