🧩 Algorithm/프로그래머스

[programmers] 짝수와 홀수, 문자열 내 마음대로 정렬하기

nerowiki 2024. 4. 6. 22:37
728x90
💡 오늘의 학습 키워드
- 짝수와 홀수
- 문자열 내 마음대로 정렬하기

 

짝수와 홀수

문제 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/12937


문제 설명

더보기
정수 num이 짝수일 경우 "Even"을 반환하고 홀수인 경우 "Odd"를 반환하는 함수,
solution을 완성해주세요.
제한 조건
1. num은 int 범위의 정수입니다.
2. 0은 짝수입니다.

 

문제 회고

💡 어떤 문제가 있었고, 나는 어떤 시도를 했는지 그리고 새롭게 안 사실은 무엇인지

특별한 제한 조건 없이 if 문으로도 쉽게 해결할 수 있는 문제였습니다.
c++ 에서 삼항 연산자를 사용하는 것처럼 "n ? a : b" 형식으로 작성해보았는데, 코드 오류가 발생해 
python의 삼항 연산자를 검색해 보았습니다.
python은 다른 언어의 삼항 연산자와 다르게 if else 를 사용하는 것을 알았습니다.

python의 독특한 삼항연산자(?)를 사용하니 코드 한 줄로 해결할 수 있었습니다.
다만 이런 형태라면 삼항 연산자를 중첩으로 사용할 때 오히려 가독성이 떨어질 것 같다는 생각이 들었습니다.

 

💡 내가 해결한 방식은?
def solution(num):
    return "Even" if num % 2 == 0 else "Odd"

 


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

문제 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/12915

 

문제 설명

더보기
문자열로 구성된 리스트 strings와, 정수 n이 주어졌을 때,
각 문자열의 인덱스 n번째 글자를 기준으로 오름차순 정렬하려 합니다.
예를 들어 strings가 ["sun", "bed", "car"]이고 n이 1이면
각 단어의 인덱스 1의 문자 "u", "e", "a"로 strings를 정렬합니다.
제한 조건
1. strings는 길이 1 이상, 50이하인 배열입니다.
2. strings의 원소는 소문자 알파벳으로 이루어져 있습니다.
3. strings의 원소는 길이 1 이상, 100이하인 문자열입니다.
4. 모든 strings의 원소의 길이는 n보다 큽니다.
5. 인덱스 1의 문자가 같은 문자열이 여럿 일 경우, 사전순으로 앞선 문자열이 앞쪽에 위치합니다.

 

문제 회고

💡 어떤 문제가 있었고, 나는 어떤 시도를 했는지 그리고 새롭게 안 사실은 무엇인지

입력받은 리스트를 특정 조건으로 정렬하는 문제입니다.
특정 조건을 기준으로 정렬하는 방법 중 sorted 함수의 key 파라미터를 사용하는 방법이 가장 간결했습니다.

key 파라미터로 넘겨진 정보를 이용하여 정렬의 기준이 되는 값을 찾아내는 것을 알고 있다면,
lambda를 사용하여 인덱스 n에 해당하는 x[n] 값을 우선으로 삼아 오름차순 정렬을 진행할 수 있습니다.

sorted 함수의 key 파라미터와 파이썬의 lambda 를 활용한다면 간단하게 풀 수 있는 문제였습니다.

 

💡 내가 해결한 방식은?
def solution(strings, n):
    answer = []
    # sorted 함수와 lambda를 활용해 strings 리스트를 정렬한다.
    answer = sorted(strings, key=lambda x: (x[n], x))
    return answer

 

TIL

첫번 째 문제에서는 python에서 사용하는 독특한 삼항 연산자 방식에 대해 학습할 수 있었다.
두번 째 문제는 sort 함수와 sorted 함수의 차이, 그리고 sorted 함수의 key 파라미터로 특정 값을 기준으로
정렬하는 방법, python에서의 lambda 함수의 사용법을 학습하며 조건에 따른 값의 정렬 방법을 구현해보았다.
파이썬에서는 체감 상 c++에 비해 TypeError가 빈번하게 일어나
코드가 간결하게 작성되는 만큼 c++보다 조금 더 신경써서 작성해야 한다고 느꼈다.
쉬운 문제라고 일반적인 풀이로 넘어가지 말고 가장 간결하고 효율적인 풀이를 생각하고 구현하면서
성장에 도움이 되도록 노력하자.