jeeyeonLIM / coding_test

Let's practice the coding test!
1 stars 0 forks source link

[정렬] 가장 큰 수 #8

Open jeeyeonLIM opened 4 years ago

jeeyeonLIM commented 4 years ago

문제 설명

제한 사항

입출력 예

numbers return
[6, 10, 2] 6210
[3, 30, 34, 5, 9] 9534330

참고, 목표

jeeyeonLIM commented 4 years ago

작성코드

jeeyeonLIM commented 4 years ago

최종 코드를 작성하기까지

알고리즘 설명 - 참고링크

METHOD1 - 참고 링크

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])

image

VER2. 수정된 최종본.⭕

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])
jeeyeonLIM commented 4 years ago

느낀점

계속 고민해보고 노가다를 하더라도 무조건 output 을 내봐야 한다고 생각한다. 하지만 함수도 잘 모르고 list 다루기조차 아직 익숙치 않았다. 그래서 코드를 찾아보게 되었고 공부하면서 익혀갔다. 코테라는 게 답을 찾는 것이 절대 아니고 제한 시간 내 답을 찾는것이다. 무조건 시간 효율적인 코드로 작성해 내야 한다 처음이라 이렇게 엄청나게 자세하게 설명을 써버렸지만 점점 코드만 쓰게 되겠지. ~나중에 요 정리해 놓은 것보고 이런것까지 정리했단 말이야 했음 좋겠다~

jeeyeonLIM commented 3 years ago

다시 풀기