📝 문제
💡 민승이는 N(1 ≤ N ≤ 1,000,000)명의 학생들에게 양의 정수로 된 라벨을 붙이려고 한다.
하지만 모든 학생들은 숫자 L(0 ≤ L ≤ 9)이 자신의 라벨 숫자에 포함되길 원치 않는다.
문제는 학생들에게 숫자 L을 쓰지 않고 최소한 작은 N개의 양의 수 세트를 라벨링 할 때
학생들이 받는 라벨 중 가장 큰 수가 몇인지를 구하는 것이다.
⚙️ 입력 : 첫째 줄에 N과 L이 공백으로 구분되어 주어진다.
⚙️ 출력 : 첫째 줄에 민승이가 학생들에게 붙이는 라벨 중 가장 큰 수를 출력한다.
1681번: 줄 세우기
민승이는 가장 작은 10개의 수 2, 3, 4, 5, 6, 7, 8, 9, 20, 22를 사용하여 라벨을 붙일 수 있다.
www.acmicpc.net
✅ 풀이
n, l = map(int, input().split())
i = 1
cnt = 0
while True:
if str(l) not in str(i):
cnt += 1
if cnt == n:
break
else:
i += 1
print(i)
# 항복한 코드
n, l = map(int, input().split())
numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
numbers.remove(l)
cnt = []
answer = ''
if l == 0:
temp = 9
while n > temp:
cnt.append(temp)
temp *= 9
cnt.reverse()
k = n
for i in range(len(cnt)):
t, k = divmod(k, cnt[i])
answer += str(numbers[t-1])
else:
temp = 8
while n > temp:
cnt.append(temp)
temp *= 9
cnt.reverse()
k = n
for i in range(len(cnt)):
t, k = divmod(k, cnt[i])
answer += str(numbers[t])
print(answer + str(numbers[k-1]))
💡 사실 노가다로 풀고 싶지 않아서,
모든 자리에 올 수 있는 숫자의 경우의 수를 계산하는 방식으로 진행했었다.
그런데 계속해서 반례를 찾아가며 수정하는 일이 너무 스트레스 받아서
결국 노가다로 푸는 방법을 선택했다.
카운팅 결과가 인원 수와 같아질 때까지 반복을 해주었으며,
1부터 1씩 더해가며, 만약 숫자에 싫어하는 번호가 없다면 카운팅 해주었다.
📝 문제
💡 민승이는 N(1 ≤ N ≤ 1,000,000)명의 학생들에게 양의 정수로 된 라벨을 붙이려고 한다.
하지만 모든 학생들은 숫자 L(0 ≤ L ≤ 9)이 자신의 라벨 숫자에 포함되길 원치 않는다.
문제는 학생들에게 숫자 L을 쓰지 않고 최소한 작은 N개의 양의 수 세트를 라벨링 할 때
학생들이 받는 라벨 중 가장 큰 수가 몇인지를 구하는 것이다.
⚙️ 입력 : 첫째 줄에 N과 L이 공백으로 구분되어 주어진다.
⚙️ 출력 : 첫째 줄에 민승이가 학생들에게 붙이는 라벨 중 가장 큰 수를 출력한다.
1681번: 줄 세우기
민승이는 가장 작은 10개의 수 2, 3, 4, 5, 6, 7, 8, 9, 20, 22를 사용하여 라벨을 붙일 수 있다.
www.acmicpc.net
✅ 풀이
n, l = map(int, input().split())
i = 1
cnt = 0
while True:
if str(l) not in str(i):
cnt += 1
if cnt == n:
break
else:
i += 1
print(i)
# 항복한 코드
n, l = map(int, input().split())
numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
numbers.remove(l)
cnt = []
answer = ''
if l == 0:
temp = 9
while n > temp:
cnt.append(temp)
temp *= 9
cnt.reverse()
k = n
for i in range(len(cnt)):
t, k = divmod(k, cnt[i])
answer += str(numbers[t-1])
else:
temp = 8
while n > temp:
cnt.append(temp)
temp *= 9
cnt.reverse()
k = n
for i in range(len(cnt)):
t, k = divmod(k, cnt[i])
answer += str(numbers[t])
print(answer + str(numbers[k-1]))
💡 사실 노가다로 풀고 싶지 않아서,
모든 자리에 올 수 있는 숫자의 경우의 수를 계산하는 방식으로 진행했었다.
그런데 계속해서 반례를 찾아가며 수정하는 일이 너무 스트레스 받아서
결국 노가다로 푸는 방법을 선택했다.
카운팅 결과가 인원 수와 같아질 때까지 반복을 해주었으며,
1부터 1씩 더해가며, 만약 숫자에 싫어하는 번호가 없다면 카운팅 해주었다.