SELECT *
FROM city
select * from CITY
where id = '1661'
select * from CITY
where COUNTRYCODE = 'JPN';
select name from CITY
where COUNTRYCODE = 'JPN'
select city, state from STATION;
SELECT Round(Sum(lat_n), 2) AS lat,
Round(Sum(long_w), 2) AS lon
FROM station
SELECT DISTINCT city
FROM station
WHERE id%2 = 0
SELECT Count(*) - Count(DISTINCT city)
FROM station
(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)
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로 연결하고 '~로 시작하는'의 의미로 ^를 앞에 붙여주면 된다.
select distinct city from STATION
where city regexp '(a|e|i|o|u)$'
반대로 '~로 끝나는'을 표현하려면 $를 제일 뒤에 붙이면 된다.
배열 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 처럼 세 개를 한꺼번에 반복하는 반복문을 쓰는 것에 대한 두려움이 있었던 듯. 차분하게 생각해보면 크게 어렵지 않으니 걱정하지 말고 익숙하지 않은 문법과 접근에도 몸을 던져보자.