TIL

99클럽 3일차 TIL (240724)

wnwlals13 2024. 7. 24. 13:16

오늘의 문제 : 문자열 내 마음대로 정렬하기

걸린 시간 : 24분

권장 시간 : 30분

 

오늘의 회고

- 문자열 정렬을 한번 더 생각해볼 수 있었던 문제였다. sort() 메서드에 대해서 알고 있었으나 기준이 2개에 대해 정렬하는 것이 약간 헷갈렸다. 문제의 조건은 아래와 같다.

  1.  n번째 인덱스를 기준으로 정렬
  2. n번째 인덱스가 같은 경우에는 사전순으로 정렬

- 2개의 조건을 처리하기 위해 javascript에서는 조건 삼항 연산자를, python에서는 lambda를 활용했다.

- 문제를 자세히 읽어보는 습관을 들이자

 

문제 풀이

1. javascript

function solution(strings, n) {
    var answer = strings.sort((a,b)=> a[n] !== b[n] ? a[n] < b[n] ? -1 : 1 : a < b ? -1 : 1 );
    return answer;
}

 

2. python

def solution(strings, n):
    answer = sorted(strings, key=lambda x : (x[n], x))
    return answer

 

 


 

챌린저문제 : 숫자 문자열과 영단어

 

걸린 시간 : 55분

권장 시간 : 60분

 

문제 회고

- 머리속으로 이해는 되었으나 어떻게 구현해야 하는 거지? 고민했다. 우선 주어지는 s 문자열을 빙글뱅글 돌면서 해당하는 문자열을 숫자로 바꿔야겠다는 것은 캐리할 수 있었다. 하지만 역시나.. 어떻게 이를 구현하는지는 여러 시도 끝에 알 수 있었다.

- 우선 숫자를 영단어로 판별하는 것이 필요하기 때문에 alphabets를 설정했다. 그래서 alphabets 배열을 확인하며 요소가 s에 포함되어 있다면, 해당 영단어를 숫자로 replace 해주었다.

 

1. javascript

function solution(s) {
    var answer = "";
    let alphabets = ["zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"];

    alphabets.forEach((v,i) => {
        while (s.indexOf(v) > -1) {
            s = s.replace(v, i)    
        }
    })
    
    return Number(s);
}

 

2. python

 

def solution(s):
    alphabets = ["zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"]
    
    for idx in range(len(alphabets)) :
        while(s.find(alphabets[idx]) > -1) :
            s = s.replace(alphabets[idx], str(idx))
    
    return int(s)

 

 

느낀점

- 구현 부분이 많이 약하다는 것을 알 수 있었다. 구현 능력을 키워야 한다!