연습장
6. 숫자 짝궁 본문
문제 해석
X, Y 두 수가 있는데
겹치는 숫자를 뽑아서 그걸로 가장 큰수를 만드는 문제라고 볼 수 있다.
12321 -> 1, 2, 3, 2, 1
42531 -> 4, 2, 5, 3, 1
각각 1,2,3 이 겹치며 321 로 배치하면 가장 큰 수가된다.
풀이 방법
1. 숫자를 분해
2. 겹치는 숫자를 추출
3. 크게 만들기 (역으로 정렬 , 내림차순으로 정렬)
라고 생각했는데
제한 사항을 보니 굉장히 긴 수가 나올 것으로 예상된다.
만약 위의 로직대로 for 문을 이용하면 시간 초과가 날것으로 예상된다.
-> 배열로 풀어야되나
-> 딕셔너리로 만들어서 {'1' : a개, '2': b개 ... } 로 풀어야될까
1. 각각을 딕셔너리로 만든다.
2. 각 key 에 따라 value 값이 겹치는 정도를 본다.
3. 큰 숫자가 되도록 만든다.
라고 생각하고 진행하였는데 풀이는 조금 다르게 되었다.
# dictionary 로 만드는 함수 -> 9부터 0 순으로 진행하여 큰 수가 먼저 나오도록 함.
def num_dict(N):
my_dict = {'9':0,'8':0,'7':0,'6':0,'5':0,'4':0,'3':0,'2':0,'1':0,'0':0}
for i in N:
my_dict[i] += 1
return my_dict
# 정답 제출용 함수
def solution(X, Y):
answer = ''
ans_list = []
X = num_dict(X)
Y = num_dict(Y)
for key in X:
if X[key] > 0: # X 에 해당 숫자가 있는 경우
for i in range(min(X[key], Y[key])): # 둘중에 작은 value 만큼 겹친다고 볼 수 있다.
ans_list.append(key) # 반복문을 이용해서 위의 횟수만큼 공통 배열에 추가한다.
# 짝궁이 없는 경우 -> 겹치는 숫자가 없는 경우
if len(ans_list) == 0:
ans_list.append('-1') # -> 빈배열에 '-1' 이 return 되도록 넣어준다.
## 0만 있는 경우 -> 9부터 0 까지 append 되도록 로직이 짜여져있다.
if ans_list[0] == '0': # 즉 ans_list 에 0 번째는 가장 큰 수가 오게되는데 이게 0 이라는 뜻은 0만 들어있다는 뜻
ans_list = ['0'] # 따라서 "00" 이 나오지 않도록 배열자체를 "0" 만 return 되도록 함.
answer = ('').join(ans_list) # list 를 string 으로 바꾸어 정답을 제출
return answer
'프로그래머스 > 1단계' 카테고리의 다른 글
8. 문자열 나누기 (0) | 2023.12.12 |
---|---|
7. 체육복 (0) | 2023.12.12 |
5. 로또의 최고 순위와 최저 순위 (0) | 2023.12.11 |
4. 옹알이2 (0) | 2023.12.11 |
3. 기사단원의 무기 (0) | 2023.12.11 |