-
[백준 Node.js/Javascript] 2292번 벌집To infinity/Coding Practice 2021. 6. 28. 20:53
2021.06.28
Question
Answer code
let fs = require('fs'); let input = fs.readFileSync('/dev/stdin').toString() let room = 1; let range = 1; let i = 0 //input의 범위를 설정해줌. while (true){ if((range + (6 * i)) < input) { range += (6 * i) i ++ } else if (range + (6 * i) >= input) { room += i; break; } } console.log(room);
How to solve?
이번 목표는 한번에 맞추는 것이었다. 그리고 해냈다. 야호!
규칙을 파악하자!
처음 벌집문제를 접했을 때, 헝..? 이란 생각이 잠깐 스쳐갔지만 모든 것에는 규칙이 있기마련.
생각해보니 벌집이 육각형이어서 숫자가 6의배수만큼 증가하면서 방의 수가 늘어날 것이란 생각이 들었다.
확인해보니 역시나.
그렇다면 그 6의 배수로 이루어진 수열을 어떻게 코드로 짤 것인가가 관건이다.
등차수열이나 등비수열도 아니어서 공식을 써보려했지만 흠, 안먹힌다.
아, 그러다 가만히 보니 6의 배수로 증가하는 수가 등차수열인 것을 발견했다. 그래서 이걸 이용하기로 한다.
쪼개자!
이전같으면 모든 공식을 하나로 작성하려 했을텐데 그래도 문제를 풀고 또 다른사람들 코드를 보면서 굳이 하나의 변수에 다 넣을 필요가 없단 것을 깨닫게 됐다. 그래서 6의 배수로 이루어진 등비수열은 변수를 하나 정해서 값을 누적해나가는 형태로 작성했다. (변수명: compare)
방의 갯수는..? input의 범위!
처음에는 for문으로 작성하려 했는데 언제까지 for문을 돌려야 할지 그 횟수를 정할 수가 없었다.
물론, 방법을 찾으면 정할수야 있기도 하겠지만 대신, 횟수가 부정확할때 사용하는 while문을 사용하기로 한다.
주어진 값은 6의 배수에 1을 더한 값을 기준으로 방의 갯수가 늘어나기 때문에 input의 범위를 정해준다면 방의 갯수를 찾을 수가 있을 것 같았다.
무슨 말이냐하면
input의 범위 방의 개수 input = 1 1개 1 < input =< 7 2개 7 < input =< 19 3개 이런 식으로 이뤄져 있단 것이다.
각 범위설정값은 (6의 배수+1)만큼 누적되며 증가한다. 그래서 해당 배수를 넣을 변수(compare)의 초기값을 1로 설정했다.
그래서 범위를 어떻게 정해주나 하다가 각각 if문을 통해 범위를 정해주기로 한다.
각 범위에 따른 조건도 다르기 때문에 if..else if문으로 설정해주니 딱이었다.
그리고 정답을 받았다!
모든 조건을 확인하자!
내가 백준을 풀며 배운건, 주어진 값만 나오도록 설정하면 안되고 모든 경우의 수를 생각해서 답이 나오도록 해야된다는 것이었다. 그래서 나는 주로 0이나 1, 그리고 그 경계값을 테스트값으로 넣어본다.
생각이 성장한 것 같아 뿌듯하다.ㅎㅎ
이제 다른사람들은 어떻게 코드를 작성했는지 구경하러 가야겠다. 분명 더 좋은 아이디어들이 있을테니 찾아보고 내 것으로 만들어야지!
아름다운 코드들
let room = 1; //최소루트 let range = 2; //범위(최소값 기준) if(input == 1) { console.log(1); } else { while (range <= input){ range = range + (6 * room); room++ } console.log(room); }
아.. 범위의 최소값을 기준으로 판별해도 된다.
input값이 최소값을 넘어가면 room의 개수가 증가하도록 코드를 짠거다.
내가 세운 로직과 idea는 비슷하지만 더 간결하다. 코드참고: https://st-lab.tistory.com/73
'To infinity > Coding Practice' 카테고리의 다른 글
[백준 Node.js/Javascript] 2869번 달팽이는 올라가고 싶다. (0) 2021.06.29 [백준 Node.js/Javascript] 1193번 분수찾기 (0) 2021.06.29 [백준 Node.js/Javascript] 1152번 단어의 개수 (0) 2021.06.27 [백준 Node.js/Javascript] 2941번 크로아티아 알파벳 (0) 2021.06.27 [백준 Node.js/Javascript] 5622번 다이얼 (0) 2021.06.27