티스토리 뷰

728x90

문제

https://programmers.co.kr/learn/courses/30/lessons/17687

규칙

  1. 숫자를 0부터 시작해서 차례대로 말한다. 첫 번째 사람은 0, 두 번째 사람은 1, … 열 번째 사람은 9를 말한다.
  2. 10 이상의 숫자부터는 한 자리씩 끊어서 말한다. 즉 열한 번째 사람은 10의 첫 자리인 1, 열두 번째 사람은 둘째 자리인 0을 말한다.

이렇게 게임을 진행할 경우,
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 1, 0, 1, 1, 1, 2, 1, 3, 1, 4, …


게임에 익숙해져 질려가던 사람들은 좀 더 난이도를 높이기 위해 이진법에서 십육진법까지 모든 진법으로 게임을 진행해보기로 했다. 숫자 게임이 익숙하지 않은 튜브는 게임에 져서 벌칙을 받는 굴욕을 피하기 위해, 자신이 말해야 하는 숫자를 스마트폰에 미리 출력해주는 프로그램을 만들려고 한다. 튜브의 프로그램을 구현하라.

ㅋㅋ 역시 개발자 생각하는게 똑같네


입력값

진법 n, 미리 구할 숫자의 갯수 t, 게임에 참가하는 인원 m, 튜브의 순서 p 가 주어진다.

  • 2 ≦ n ≦ 16
  • 0 < t ≦ 1000
  • 2 ≦ m ≦ 100
  • 1 ≦ pm

출력 형식

튜브가 말해야 하는 숫자 t개를 공백 없이 차례대로 나타낸 문자열. 단, 1015는 각각 대문자 AF로 출력한다.


입출력 예제

n t m p result
2 4 2 1 0111
16 16 2 1 02468ACE11111111
16 16 2 2

1번 케이스를 예를 들면

  • 2진법
  • 미리 구할 숫자의 갯수?가 result에 들어갈 총 size 구나? 그래서 4.
  • 참여인원 = 2
  • 튜브 순서 = 1

0, 1, 1, 0, 1, 1, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, …니깐

첫번째 칸인 0부터 시작해서 2씩 증가해서 4번 채우면

0111 요렇게 된다 ㅇ_ㅇ


접근방법

그냥 size를 만족할 때까지 while문 돌면서 값 추가해주면 될 것 같다.

그냥 단순 n진법수를 차례대로 넣으니 케이스3개에서 시간초과가 났다 =_=.. 이렇게 하면 안될 것 같다.

아마 쌓이는 문자열이 너무 길어질 경우 접근하는데 오래걸리기 때문에 이러한 문제가 생긴 것이라 생각했다. 그래서 result값에 넣은 후에 뒤에 있는부분을 버리는 방식으로 접근을 해서 수정했다.


코드

728x90
댓글