Open jeeyeonLIM opened 4 years ago
~ㅠ_ㅠ~
import itertools
def solution(numbers):
numbers_str = [str(i) for i in numbers]
comb = itertools.permutations(numbers_str) # input_list 원소값을 2개씩 조합
comb = [int("".join(i)) for i in comb] # comb = map(int, ["".join(i) for i in comb])
return str(max(comb))
solution([6, 10, 2])
![image](https://user-images.githubusercontent.com/45617225/83649987-cbe9fe80-a5f2-11ea-8e5b-6c455f764862.png)
- 결과는 시간 초과로 모두 실패, 게다가 패키지 썼음ㅠㅠ
#### 추가 설명
- 즉 밑에와 같이 "".join() 써주면 "" 기준으로 각각의 원소를 join해줌.
![image](https://user-images.githubusercontent.com/45617225/83646814-23866b00-a5ef-11ea-8341-f2b0255bceb5.png)
- `itertools` 모듈의 `permutations` 함수는 이렇게 모든 가능한 조합 추출해준다.
![image](https://user-images.githubusercontent.com/45617225/83661817-aadcda00-a601-11ea-9c03-04fec3d720d7.png)
- 참고로 ```itertools.permutations(s_num,2)``` 이렇게 하면 2개씩 가능한 조합 추출해준다 3개니깐 총 3! 만큼 값 추출됨.
![image](https://user-images.githubusercontent.com/45617225/83661931-cfd14d00-a601-11ea-9da2-a81f0f55038e.png)
- [참고] 문자열 list 조인시 👇 요런식으로 공백 단위로 join해서 붙여줄 수 있음.
["".join(i) for i in list]
### METHOD2 - [참고 링크](https://sinsomi.tistory.com/entry/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-Python-%EA%B0%80%EC%9E%A5-%ED%81%B0-%EC%88%98-%EC%B4%88%EC%BD%94%EB%8D%94)
- 요 티스토리 글 보고 이해됨. 처음에 문자열 리스트를 그대로 앞으로 가져와서 첫자리부터 대소비교하는 개념이 잘 와닿지 않았는데 생각보다 간단한 개념이였다 ..!
#### VER1.❌
```python
def solution(numbers):
numbers_str = [str(i) for i in numbers]
numbers_str.sort(key = lambda x:(x*6)[:6], reverse = True)
return "".join(numbers_str)
solution([6, 10, 2])
def solution(numbers):
if sum(numbers) == 0: # 만약 [0,0,0] 같은 원소 모두 0인값 들어온다면
return "0" # str변환하고 공백기준으로 붙여라
else:
numbers_str = [str(i) for i in numbers]
numbers_str.sort(key = lambda x:(x*6)[:6], reverse = True) # 6번 반복해준다음 앞자리 6개만 파싱하여 값 비교
return "".join(numbers_str)
# solution([6, 10, 2])
solution([0, 0, 0])
def solution(numbers):
numbers = list(map(str, numbers))
numbers.sort(key=lambda x: x*3, reverse=True)
return str(int(''.join(numbers)))
계속 고민해보고 노가다를 하더라도 무조건 output 을 내봐야 한다고 생각한다. 하지만 함수도 잘 모르고 list 다루기조차 아직 익숙치 않았다. 그래서 코드를 찾아보게 되었고 공부하면서 익혀갔다. 코테라는 게 답을 찾는 것이 절대 아니고 제한 시간 내 답을 찾는것이다. 무조건 시간 효율적인 코드로 작성해 내야 한다 처음이라 이렇게 엄청나게 자세하게 설명을 써버렸지만 점점 코드만 쓰게 되겠지. ~나중에 요 정리해 놓은 것보고 이런것까지 정리했단 말이야 했음 좋겠다~
그 후 join하여 문자열로 만들어주면 된다.
def solution(numbers):
numbers= sorted( map(str, numbers), # 원소를 전부 str로 치환하기
reverse=True, # x*3이 큰 숫자대로 역순 정렬
key = lambda x : x*3) # 3자리를 뒤에 더해주기(최대 천의자리)
return ''.join(numbers)
문제 설명
제한 사항
입출력 예
참고, 목표