일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- python3
- 인코더
- 스프링
- stl
- BFS
- Rebase
- 프로그래머스
- 백준
- git
- retrofit
- 카카오인코더
- 블로그개설
- 연결리스트
- DP
- 프로그래밍
- hackerrank
- 스프링프레임워크
- c++
- 머신러닝
- Map
- spring
- 안드로이드
- vue.js
- ADAS
- 스프링 프레임워크
- Android
- c
- 백트래킹
- Kotlin
- TensorFlow
Archives
- Today
- Total
이것저것 공부한 기록
C++) 프로그래머스 문제 풀이_콜라스 추측 본문
1-1. 입력된 수가 짝수라면 2로 나눕니다. 1-2. 입력된 수가 홀수라면 3을 곱하고 1을 더합니다. 2. 결과로 나온 수에 같은 작업을 1이 될 때까지 반복합니다. 예를 들어, 입력된 수가 6이라면 6→3→10→5→16→8→4→2→1 이 되어 총 8번 만에 1이 됩니다. 위 작업을 몇 번이나 반복해야하는지 반환하는 함수, solution을 완성해 주세요. 단, 작업을 500번을 반복해도 1이 되지 않는다면 –1을 반환해 주세요. |
백준 문제 풀다가 프로그래머스에서도 풀어봐야 할 것 같아서 사이트 이동.
전체적으로 좀.. 백준 문제보다 더러운 문제가 많구나 생각했는데
생각해보니 프로그래머스에서도 dp를 찾아서 풀면 깔끔한 문제가 많겠군 해서 음.
무튼 이 문제 자체는 굉장히 간단했다.
그러나 계산과정에서 값이 어디까지 늘어나는건지 가늠을 못 해서 자료형 지정하는데 약간 애먹었음.
그리고 문제의 13번 입력값...
13번 입력값에 대해 약간 의문점이 있는데,
인풋값으로 1이 들어갔을 때 왜 0이 나와야 하는가?
1이 들어가면 1-2로 들어가서 3을 곱하고 1을 더하는 과정부터 수행해서 결국 3이 출력되어야 하는게 아닌가?
무튼 이 문제는 1이면 바로 아무 연산도 수행하지 않아도 되기 때문에 0이라고 해야 맞출 수 있는 문제였다.
해결을 위해 break문을 for문의 맨 위로 올려주었다.
원래 구현에서 그냥 500번 수행해서 1이 될 경우에도 문제가 없기 때문에.
근데 음..... 내 생각일지 모르겠지만 문제에 부가설명이 좀 더 필요해보인다.
#include <string>
#include <vector>
using namespace std;
int solution(int num) {
int answer = 0;
__int64_t input = num ;
for( int i = 0 ; i < 500 ; ++ i)
{
if( input == 1 )
break ;
if( input%2 == 0 )
{
input=input/2 ;
answer++;
}
else
{
input=input*3+1 ;
answer++;
}
if( input == 1 )
break ;
}
if( input != 1 )
answer = -1 ;
return answer;
}
'Study > 프로그래밍 문제풀이' 카테고리의 다른 글
C++) HackerRank 풀이_Hash Tables : Ransom Note (0) | 2019.10.25 |
---|---|
C++) 프로그래머스 문제 풀이_다음 큰 숫자 (0) | 2019.10.24 |
C++) 백준 2011번 풀이_암호코드 (0) | 2019.10.23 |
C++) 백준 2133번 풀이_타일 채우기 (0) | 2019.10.23 |
C++) 백준 1699번 풀이_제곱수의 합 (0) | 2019.10.23 |