240522_TIL

J Lee·2024년 5월 22일

아무리 사소하더라도 배움이 없는 날은 없다.

SQL 코드카타 129번

SELECT *
FROM   city

SQL 코드카타 130번

select * from CITY
where id = '1661'

SQL 코드카타 131번

select * from CITY
where COUNTRYCODE = 'JPN';

SQL 코드카타 132번

select name from CITY
where COUNTRYCODE = 'JPN'

SQL 코드카타 133번

select city, state from STATION;

SQL 코드카타 134번

SELECT Round(Sum(lat_n), 2)  AS lat,
       Round(Sum(long_w), 2) AS lon
FROM   station 

SQL 코드카타 135번

SELECT DISTINCT city
FROM   station
WHERE  id%2 = 0 

SQL 코드카타 136번

SELECT Count(*) - Count(DISTINCT city)
FROM   station 

SQL 코드카타 137번

(SELECT city,
        Length(city)
 FROM   station
 ORDER  BY 2,
           1
 LIMIT  1)
UNION
(SELECT city,
        Length(city)
 FROM   station
 ORDER  BY 2 DESC,
           1
 LIMIT  1) 

SQL 코드카타 138번

SELECT DISTINCT city
FROM   station
WHERE  city REGEXP '^(a|e|i|o|u)' 

a,e,i,o,u로 시작하는 city를 찾는 문제.
정규식에서 |는 or를 나타내므로, a|e|i|o|u로 연결하고 '~로 시작하는'의 의미로 ^를 앞에 붙여주면 된다.

SQL 코드카타 139번

select distinct city from STATION
where city regexp '(a|e|i|o|u)$'

반대로 '~로 끝나는'을 표현하려면 $를 제일 뒤에 붙이면 된다.


알고리즘 코드카타 48번

배열 array의 i번째 숫자부터 j번째 숫자까지 자르고 정렬했을 때, k번째에 있는 수를 구하려 합니다.

예를 들어 array가 [1, 5, 2, 6, 3, 7, 4], i = 2, j = 5, k = 3이라면

array의 2번째부터 5번째까지 자르면 [5, 2, 6, 3]입니다.
1에서 나온 배열을 정렬하면 [2, 3, 5, 6]입니다.
2에서 나온 배열의 3번째 숫자는 5입니다.

배열 array, [i, j, k]를 원소로 가진 2차원 배열 commands가 매개변수로 주어질 때, commands의 모든 원소에 대해 앞서 설명한 연산을 적용했을 때 나온 결과를 배열에 담아 return 하도록 solution 함수를 작성해주세요.

1차 시도(정답)

def solution(array, commands):
    x = []
    y = []
    z = []
    answer = []
    for i in commands:
        x.append(i[0])
        y.append(i[1])
        z.append(i[2])
    for j in range(len(commands)):
        temp = sorted(array[x[j]-1:y[j]])[z[j]-1]
        answer.append(temp)
    return answer

생각해보니 꼭 이렇게 복잡하게 하지 않아도 됐을 것 같다.
commands의 요소를 다 끊어서 별도의 리스트로 보내는 것보다, 한방에 commands의 모든 요소들을 돌면서 해결하는 방법도 가능하기 때문.

def solution(array, commands):
    answer = []
    for i, j, k in commands:
        temp = sorted(array[i-1:j])[k-1]
        answer.append(temp)
    return answer

이렇게 하면 똑같은 결과를 내면서도 1차 시도보다 훨씬 코드를 간결하게 만들 수 있다.

왜 1차 시도와 같은 풀이가 나왔는지를 돌이켜 보니, 아직까지 for문을 한 번에 하나의 요소에 대해서만 써 왔던 영향이 컸던 것 같다. for i,j,k 처럼 세 개를 한꺼번에 반복하는 반복문을 쓰는 것에 대한 두려움이 있었던 듯. 차분하게 생각해보면 크게 어렵지 않으니 걱정하지 말고 익숙하지 않은 문법과 접근에도 몸을 던져보자.

profile
기본기를 소홀히 하지 말자

0개의 댓글