[프로그래머스] 문자열 내 마음대로 정렬하기, 문자열 내 p와 y의 개수, 문자열 내림차순으로 배치하기

Minyoung Lee·2023년 1월 2일

Programmers

목록 보기
4/15
post-thumbnail

1. 문자열 내 마음대로 정렬하기

문제 링크

https://school.programmers.co.kr/learn/courses/30/lessons/12915

개념 & 문법

- 문법

  • sort() : 사전순으로 알아서 정렬 됨.
  • 특정 키를 기준으로 정렬하는 경우
    • sorted(strings, key = lambda x: x[1])
      => strings에 담긴 문자열의 두 번째(index = 1) 문자 기준으로 정렬하는 것.

코드

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

2. 문자열 내 p와 y의 개수

문제 링크

https://school.programmers.co.kr/learn/courses/30/lessons/12916?language=python3

개념 & 문법

  • filter(함수, 리스트)
  • lambda -> filter -> len 함수 까지로 했더니 그래도 2번은 돌게 만든 것 같아서 찜찜했는데 count를 쓰니 1번만 돌아도 된다.
    js 공부하다 보니 filter를 자주 봐서 count 생각이 안났다...

코드

def solution(s):
    s = list(s.lower())
    
    pcnt = len(list(filter(lambda x : x == "p", s)))
    ycnt = len(list(filter(lambda x : x == "y", s)))
    
    if pcnt == ycnt:
        return True
    else:
        return False

최적 코드

def solution(s):
    return s.lower().count('p') == s.lower().count('y')

3. 문자열 내림차순으로 배치하기

문제 링크

https://school.programmers.co.kr/learn/courses/30/lessons/12917

개념 & 문법

- 문법

  • ascii code 변환
    • ord() : char -> ascii code
    • chr() : ascii -> char
    ord(a) : 65
    chr(65) : a
  • list 역정렬
a1 = [6, 3, 9]
print('a1:', a1)
a1.sort(reverse=True) # 원본을 역정렬하고 수정합니다(in-place)
print('-----수행 후-----')
print('a1:', a1)
# a1: [9, 6, 3]
  • list.sort(), sorted(list) with String
s = "abcd"
s.sort() '''=> Error, string은 iterator가 아니기에 sort 속성이 없음.'''

'''반대로 sorted 는 알아서 list로 만든 다음 reverse 한다.'''
s = sorted(s, reverse=True)
#-> ["d", "c", "b", "a"]
  • ''.join(list): 매개변수로 들어온 ['a', 'b', 'c'] 이런 식의 리스트를 'abc'의 문자열로 합쳐서 반환해주는 함수이다.

코드

from functools import reduce
def solution(s):
#ord -> sort -> chr -> connect
    answer = ''
    s = list(map(lambda x : ord(x), list(s)))
    s.sort(reverse=True)
    answer = list(map(lambda x : chr(x), s))  
    return reduce(lambda x, y: x + y, answer)

=> 우선 아스키로 바꾼 다음 sorting하고 다시 char로 바꾼 실행절차로 하니
딱봐도 코드가 복잡해보임.

최적 코드

def solution(s):
    return ''.join(sorted(s, reverse=True))

후기

sorted로 문자열 자체를 list로 만들어 reverse정렬 후 join 시킨 것.
애초에 sort속성이 사전순 정렬이므로 ord, chr이 필요하지 않다.

profile
웩알고👩‍💻

0개의 댓글