오늘 풀었던 알고리즘 문제는 음양 더하기였다.
어떤 정수들이 있습니다. 이 정수들의 절댓값을 차례대로 담은 정수 배열 absolutes와 이 정수들의 부호를 차례대로 담은 불리언 배열 signs가 매개변수로 주어집니다. 실제 정수들의 합을 구하여 return 하도록 solution 함수를 완성해주세요.
위와 같은 문제였다.
absolutes와 sings 배열의 크기는 항상 같다고 명시되어 있었으므로 for문을 absolutes.length까지 돌리면서 sings함수에 true가 있으면 answer+=absolute[i]를, false가 있으면 answer+=absolute[i]*-1를 해주면 되겠다고 생각했다.
내가 짠 코드는 아래와 같다.
class Solution {
public int solution(int[] absolutes, boolean[] signs) {
int answer = 0;
for (int i = 0; i < absolutes.length; i++){
if (signs[i] == true) {
answer += absolutes[i];
} else if (signs[i] == false) {
answer += absolutes[i] * -1;
}
}
return answer;
}
}
SQL 문제는 입양 시각 구하기(1)였고, 문제는 아래와 같다.
보호소에서는 몇 시에 입양이 가장 활발하게 일어나는지 알아보려 합니다. 09:00부터 19:59까지, 각 시간대별로 입양이 몇 건이나 발생했는지 조회하는 SQL문을 작성해주세요. 이때 결과는 시간대 순으로 정렬해야 합니다.
HOUR 함수라는 걸 몰랐기 때문에, 처음엔 아래와 같이 짰었다.
SELECT DATE_FORMAT(DATETIME, '%H') AS HOUR, COUNT(DATETIME)
FROM ANIMAL_OUTS
WHERE TIME(DATETIME) BETWEEN '09:00:00' AND '19:59:59'
GROUP BY HOUR
ORDER BY HOUR;
근데 테스트 케이스 출력 결과 hour 투플 값이 1, 13, 12이런식으로 이상하게 섞여나오고 틀렸다고 나왔었다.
그래서 HOUR 함수라는걸 구글링해서 알게 되었다.
DAYOFMONTH(date) : 날짜만 리턴해주는 함수. (1-31) 한달을 단위로.
DAYOFYEAR(date) : 이역시 날짜만 리턴. (1-366) 1년을 단위로.
TO_DAYS(date) : 연도와 달을 모두 날짜화 시켜서 리턴해줍니다.
(1999-01-01 = (1999 365) + (01 31) + 1)
MONTH(date) : 달을 리턴해주는 함수.
DAYNAME(date) : 요일을 문자로 리턴. (ex :'Thursday')
MONTHNAME(date) : 달을 문자로 리턴. (ex :'February')
WEEK(date) : 해당 연도에 몇번째 주인지를 리턴 (0-52)
YEAR(date) : 연도를 리턴 (1000-9999)
HOUR(time) : 시간 리턴
MINUTE(time) : 분 리턴
SECOND(time) : 초 리턴
DATE_FORMAT(date,format)
%W' Weekday name (Sunday'..`Saturday')
%D' Day of the month with english suffix (1st', 2nd', 3rd',
etc.)
`%Y' Year, numeric, 4 digits
`%y' Year, numeric, 2 digits
%a' Abbreviated weekday name (Sun'..`Sat')
%d' Day of the month, numeric (00'..`31')
%e' Day of the month, numeric (0'..`31')
%m' Month, numeric (01'..`12')
%c' Month, numeric (1'..`12')
%b' Abbreviated month name (Jan'..`Dec')
%j' Day of year (001'..`366')
%H' Hour (00'..`23')
%k' Hour (0'..`23')
%h' Hour (01'..`12')
%I' Hour (01'..`12')
%l' Hour (1'..`12')
%i' Minutes, numeric (00'..`59')
%r' Time, 12-hour (hh:mm:ss [AP]M')
%T' Time, 24-hour (hh:mm:ss')
%S' Seconds (00'..`59')
%s' Seconds (00'..`59')
%p' AM' or `PM'
%w' Day of the week (0'=Sunday..`6'=Saturday)
%U' Week (0'..`52'), Sunday is the first day of the week.
%u' Week (0'..`52'), Monday is the first day of the week.
%%' Single %' characters are ignored. Use %%' to produce a literal %' (for future extensions).
제출한 코드는 아래와 같다.
-- 코드를 입력하세요
SELECT HOUR(DATETIME) AS HOUR, COUNT(*) AS COUNT
FROM ANIMAL_OUTS
WHERE HOUR(DATETIME) BETWEEN 9 AND 19
GROUP BY HOUR
ORDER BY HOUR
제출 후 정답이 나왔고, 제출했던 코드가 뭐가 잘못되었었는지 확인하기 위해 처음 제출했던 코드를 재제출 해보았다.
SELECT DATE_FORMAT(DATETIME, '%H') AS HOUR, COUNT(DATETIME)
FROM ANIMAL_OUTS
WHERE TIME(DATETIME) BETWEEN '09:00:00' AND '19:59:59'
GROUP BY HOUR
ORDER BY HOUR;
근데 또 정답이라고 떴다. 처음 떴었던 오류는 뭐였던거지 싶어서 매니저님, 튜터님한테 물어봤는데

결론은 프로그래머스한테 밀당당한것이었다.(버그)
내가 아니라 컴퓨터가 틀릴때도 있구나싶었다..
그리고 오늘 스프링 주차에 들어서서 강의를 들었다.
오늘은 서버와 HTML에 관해 강의를 들었고, 설치해야하는 프로그램들을 설치하였다. 강의 내용에 대한 정리는 내일 TIL에 작성하겠다.