[Programmers/Lv. 0] 코딩테스트 입문 Day 16 - 문자열, 수학, 배열, 조건문 (Python)

2023. 5. 30. 10:15Algorithm

1. 편지


글자 한 자가 가로 2cm 크기로 되게 편지를 쓸 때, 축하 문구 nessage 문자열을 적기 위해 필요한 편지지의 최소 가로길이를 구하라는 문제이다.

 

(내가 생각한 풀이 과정)

문자열 길이의 곱하기 2배 해주면 된다.

 

(코드)

더보기

💡 내 코드

def solution(message):
    return len(message)*2

 


2. 가장 큰 수 찾기


정수 배열이 주어질 때, 가장 큰 수와 그 수의 인덱스를 담은 배열을 구하라는 문제이다.

 

(내가 생각한 풀이 과정)

최댓값을 구하는 max() 함수와 인덱스를 구하는 index() 함수를 이용하면 된다. (오늘 문제들 왜이렇게 쉬운 거야)

 

(코드)

더보기

💡 내 코드

def solution(array):
    return [max(array), array.index(max(array))]

 


3. 문자열 계산하기


문자열로 된 수식이 주어질 때, 수식을 계산하라는 문제이다.

연산자는 +, -만 존재하며, 수식 안의 숫자와 연산자는 각각 공백 하나로 구분되어 있다.

 

(내가 생각한 풀이 과정)

고민을 많이 한 문제이다.
우선, 수식 안에 있는 각 숫자와 연산자가 공백으로 나누어져 있다 했기에, split(" ")으로 나누어 "+"일 경우의 조건, "-"일 경우의 조건, 정수일 때의 조건을 고려하여 각각 다른 리스트를 넣고... 너무 산으로 가는 듯했다.

문제 의도는 이게 아닌 듯하여 파이썬 문법을 차분하게 보던 중, 엄청난 함수를 발견하게 된다.

바로, eval(expression)이라는 함수.
매개변수로 문자열 expression(식)을 받아 실행하는 함수이다. 바로, 이 문제 맞춤 함수인 것이다.
앞으로, 파이썬에는 문자열로 되어 있는 식의 연산이 필요한 경우에는 이 함수를 사용하면 되겠다.

 

(코드)

더보기

💡 내 코드

def solution(my_string):
    return eval(my_string)

 

💡 다른 사람의 풀이 코드

아래 코드는 내가 감탄했던 문제 풀이 방법이다.

split()을 내가 생각했던 것처럼 공백을 기준으로 하는 것이 아니라 공백을 포함한 + 연산자를 기준으로 나눈 것이다.
대신, 이 전에 - 연산자는 + - 로 replace 하여 sum()이라는 합계 함수를 사용했을 때, "-" 연산자를 포함했던 그 자체의 수가 음수로 인식되게끔 설정을 한 것이다.

진짜 이런 풀이는.... 존경할 수밖에 없다... 또 하나 이렇게 배운다.

def solution(my_string):
    return sum(int(i) for i in my_string.replace(' - ', ' + -').split(' + '))

 


4. 배열의 유사도


문자열 배열 s1과 s2가 주어질 때, 같은 원소의 개수를 구하라는 문제이다.

 

(내가 생각한 풀이 과정)

같은 원소의 개수를 구하라 = 두 배열에서 같은 원소를 찾고, 그 배열의 길이를 구하라 = 주어진 두 집합의 교집합 길이를 구하라

집합은 set, 교집합은 &, 길이는 len() 함수로 구할 수 있다.

 

(코드)

더보기

💡 내 코드

def solution(s1, s2):
    return len(set(s1)&set(s2))