GitHub ID : soohyun-dev
윤수현의 개발 공간
GitHub ID : soohyun-dev
전체 방문자
오늘
어제
  • 분류 전체보기 (918)
    • 성장기록 (49)
      • 성장기록 (3)
      • 우아한테크코스 (16)
      • 프로젝트 (15)
      • TIL (14)
      • 테오의 스프린트 (1)
    • 프로그래밍언어 (88)
      • C언어 (14)
      • HTML\CSS (12)
      • JavaScript (7)
      • React (23)
      • Python (11)
      • JAVA (14)
      • TypeScript (6)
    • 알고리즘 공부 (736)
      • 코드업 - 파이썬 (108)
      • 백준 - 파이썬 (468)
      • 백준 - 자바스크립트 (125)
      • 프로그래머스 - 파이썬 (1)
      • 프로그래머스 - 자바스크립트 (34)
    • 책 리뷰 (9)
      • 프로그래밍 (3)
      • 독서 (6)
    • 전자기기 (1)
    • 일상, 일기 (18)
    • 기술 세미나 (2)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 코드업
  • 파이썬
  • 프로그래머스자바스크립트
  • 코드업파이썬
  • 프로그래머스풀이
  • javascript
  • 프론트엔드
  • 영어독해
  • 코딩
  • 독해
  • 영어
  • 백준
  • 자바스크립트
  • 코딩테스트
  • 백준파이썬
  • 백준풀이
  • 프로그래머스
  • PYTHON
  • 프로그래밍언어
  • 코테

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
GitHub ID : soohyun-dev

윤수현의 개발 공간

백준/ Gold 5 문제 , 백준 Node.js 자바스크립트 1011 , Fly me to the Alpha Centauri
알고리즘 공부/백준 - 자바스크립트

백준/ Gold 5 문제 , 백준 Node.js 자바스크립트 1011 , Fly me to the Alpha Centauri

2022. 10. 8. 15:54

백준/ Gold 5 문제 , 백준 Node.js 자바스크립트 1011 , Fly me to the Alpha Centauri

 

 

풀이 시간

 

 

 

 

 

Check Point !   ( 해당사항 ✓체크 )

1. 막힘 없이 수월하게 풀린 문제인가?

2. 1시간이내로 풀렸던 문제인가?

3. 1시간 이상 or 며칠을 두고 풀어봤더니 풀린 문제인가?

4. 시간을 써도 도무지 풀 수 없는 문제인가?

5. 솔루션을 찾아봤는가?

-------------------------------------------------------------------------------------------
난이도 체감
1. 최상
2. 상
3. 중
4. 하


<이해도>
1. 완벽히 이해
2. 다소 헷갈리는 부분들이 있음
3. 이해 못함


<덧붙일 말>
솔루션을 봤으나 그 솔루션대로 풀지 않고 규칙을 찾아 스스로 풀었음.
나열해서 보면 금방 보인다. (단, 정확히 나열할 것.)

 

 

 

문제 출처

https://www.acmicpc.net/problem/1011

 

1011번: Fly me to the Alpha Centauri

우현이는 어린 시절, 지구 외의 다른 행성에서도 인류들이 살아갈 수 있는 미래가 오리라 믿었다. 그리고 그가 지구라는 세상에 발을 내려 놓은 지 23년이 지난 지금, 세계 최연소 ASNA 우주 비행

www.acmicpc.net

 

 

 

풀이

 

 

직접 16까지 나열해 본 경우이다. 

 

여기까지 봤을때 규칙이 보이시나요? 그러면 이제 그 규칙을 코드로 구현만 해주시면 정답입니다.

 

 

규칙이 안보이신다고요?

 

그럼 같이 확인해봅시다.

 

 

1 은 1자리 

2 는 2자리

 

입니다.  한개씩 증가하였네요

 

 

그다음을 봅시다

 

3은 3자리  다음 4는 4자리일까요?... 했더니 3자리네요?

 

3 은 3자리

4 도 3자리

 

다음 5는 또 4자리로 늘어났네요

그다음 6도 4자리.

 

 

그럼 7은 5자리겠지...? 라고 뭔가 의심이 됩니다.

 

역시 7은 5자리네요

8도 5자리

 

자 9가 관건인데, 5자리일까요 6자리일까요? 

 

9는 증가하지않고 5자리네요 

 

여기까지 보면 이제 규칙이 약간 보입니다.

 

정리해볼까요?

 

1 1
2 2
3 3
4 3
5 4
6 4
7 5
8 5
9 5

 

 

오른쪽을 보면 한개씩 증가하고는 있는데 그 주기가 1씩 늘어나고 있습니다.

 

1        => 1

2        => 2

3,4     => 3

5,6     => 4

7,8,9  => 5

 

 

이렇게요.

 

그러면 한번 예상을 해볼까요? 지금까지 나온대로의 숫자들을 가지고 다음 수를 예상해보면,

 

10, 11, 12 는 6자리 가 나올 거 같은데 어떠신가요.

 

 

실제로 6자리가 나옵니다!!!  그러면 점점 확실해지죠?

 

그럼 더 예측해봅시다.

 

13 14 15 16 은 7자리가 나오겠죠?

 

덤으로  17, 18, 19, 20 은 8자리?  

 

실제로 몇개만 해보면 실제로 맞습니다.

 

 

 

이제까지의 모든 결과를 가지고 한번 규칙을 세워보겠습니다.

 

순번 0, 길이 값 0, 주기의 초깃값 1 을 잡습니다.

 

이후 위에서 보면 주기의 두배에 해당하는 범위 이내에서 길이가 1씩 두번 증가합니다.

 

 

예를들어 주기가 2라면

 

3~4 범위에서 길이 한번, 5~6 범위에서 길이가 각각 한번씩 증가하는 것이죠.

 

주기가 3이라면

 

7~9 범위에서 길이가 한번, 10~12 범위에서 길이가 하나 증가하고요.

 

 

순번은 문제에서 주어지는 두 값의 차이 만큼이니까 0부터 그 차이값까지 증가시켜주면 되겠군요.

 

 

그럼 while 문을 1부터 차례대로 그 차이값 이하까지만 쭉 돌려줍시다.

 

num이라는 숫자는 주기만큼 증가하게 되고 그 범위 이내의 숫자들을 길이가 하나씩 증가합니다.

 

그리고 한번 체크합니다. 우리가 확인해야될 숫자가 이 범위를 초과하거나 같은지를.

 

초과하거나 같다면 지금까지 늘어난 길이를 리턴시켜줍니다.

 

아직 이하 값이라면 주기만큼 더 늘려줍니다. 그러면 길이도 하나 또 늘겠죠?

 

 

이렇게 두번 하게되면, 이제 규칙에 따라서 주기를 1 또 증가시켜줘야 합니다.

 

 

 

말로 하니까 헷갈리죠?

 

 

간단히 보면

 

 

+ 1    길이 1 증가 

숫자 확인

+ 1    길이 1 증가  ,  주기 1 증가

숫자 확인

+ 2    길이 1 증가  

숫자 확인

+ 2    길이 1 증가  , 주기 1 증가

숫자 확인

+ 3    길이 1 증가

숫자 확인

+ 3    길이 1 증가 , 주기 1 증가

.

.

.

.

이런 식으로 쭉 늘려가면서 범위를 벗어나는 지를 확인 하는 겁니다.

 

이 과정을 반복하면 원하는 값을 얻을 수 있습니다.

 

 

마지막으로 이해를 더 돕기 위해 표로 정리해보겠습니다

 

 

이렇게 정리할 수 있겠습니다.

 

 

 

 

 

정답

 

 

const input = require("fs")
  .readFileSync("/dev/stdin")
  .toString()
  .trim()
  .split("\n");

const T = input.shift();
const space = input.map((v) => v.split(" ").map(Number));

function solution(T, space) {
  let arr = [];
  const check = (V) => {
    let [num, line, range] = [0, 0, 1];
    while (num < V) {
      [num, line] = [num + range, line + 1];
      if (num >= V) return line;
      [num, line, range] = [num + range, line + 1, range + 1];
    }
    return line;
  };
  space.map((v) => {
    let [a, b] = v.map(Number);
    let tmp = b - a;
    arr.push(check(tmp));
  });
  arr.map((v) => console.log(v));
}
solution(T, space);

 

반응형

'알고리즘 공부 > 백준 - 자바스크립트' 카테고리의 다른 글

백준/ Silver 3 문제 , 백준 Node.js 자바스크립트 11478 , 서로 다른 부분 문자열의 개수  (0) 2022.10.12
백준/ Gold 5 문제 , 백준 Node.js 자바스크립트 15686 , 치킨 배달 [DFS]  (0) 2022.10.09
백준/ Gold 5 문제 , 백준 Node.js 자바스크립트 2096 , 내려가기 [DP]  (1) 2022.10.07
백준/ Silver 4 문제 , 백준 Node.js 자바스크립트 24499 , blobyum [슬라이딩 윈도우]  (1) 2022.10.06
백준/ Silver 4 문제 , 백준 Node.js 자바스크립트 12847 , 꿀 아르바이트 [슬라이딩 윈도우]  (1) 2022.10.05
    '알고리즘 공부/백준 - 자바스크립트' 카테고리의 다른 글
    • 백준/ Silver 3 문제 , 백준 Node.js 자바스크립트 11478 , 서로 다른 부분 문자열의 개수
    • 백준/ Gold 5 문제 , 백준 Node.js 자바스크립트 15686 , 치킨 배달 [DFS]
    • 백준/ Gold 5 문제 , 백준 Node.js 자바스크립트 2096 , 내려가기 [DP]
    • 백준/ Silver 4 문제 , 백준 Node.js 자바스크립트 24499 , blobyum [슬라이딩 윈도우]
    GitHub ID : soohyun-dev
    GitHub ID : soohyun-dev
    환영합니다!😊 이곳은 저의 개발에 관한 내용들을 정리하는 공간입니다. 알고리즘 풀이에도 관심이 많아요. 좋은 하루 되세요~! github : soohyun_dev

    티스토리툴바