본문 바로가기

분류 전체보기150

[백준] 1629. 곱셈 (C++) Key시간 제한이 0.5초이고 각 수는 최대 2,147,483,647(21억 정도..)이므로 당연히 반복문 같은걸 사용하면 안된다.거듭제곱하면 바로 생각나는 게 for문으로 곱해주기인데 이런 경우엔 반대로 큰 수를 작게 쪼개는 방법을 생각해야한다.  Idea지수의 합 법칙과 모듈러 분배 법칙을 알아야한다 (쓸 일이 없어서 기억 저 뒷편으로 사라져버려... 검색으로 알아냈다ㅎ..) 지수의 합 법칙모듈러 분배 법칙 2^5를 예시로 들어보자면 2^5 = 2^2 * 2^2 * 2이다.2^2를 한번 더 쪼개면 2*2이다.  이렇게 지수를 반으로 쪼갰다가 다시 곱하는 과정에서 모듈러 연산을 적용하는 방식을 통해 정답을 구할 수 있다. '반복적으로 값을 쪼개는 일'이니 재귀가 떠올랐다. 이 재귀함수는 지수가 1이 될.. 2024. 6. 17.
프로그래머스 SQL - 비트연산 관련된 프로그래머스 문제특정 형질을 가지는 대장균 찾기이 문제에서 1번 형질은 이진수로 1, 3번 형질은 이진수로 100이다.따라서 두 형질 중 하나 이상을 갖고 있는지 파악하려면 100+1=101, 즉 5와 and 연산을 한 결과가 1 이상이면 된다.동시에 2번 형질(10)이 없어야하므로 &2 연산으로 두번째 비트가 1인 결과에 not을 한다. 나는 where 절에서 1 이상이라는 조건을 ' > 0' 으로 표시했는데, where절에서는 0이 아닌 비트는 모두 true이기 때문에 GENOTYPE & 5 이렇게만 써줘도 된다고 한다. 오늘도 하나 배워간다.출처SELECT COUNT(ID) AS COUNTFROM ECOLI_DATA AS EDWHERE GENOTYPE & 5 > 0 AND (NOT GENOT.. 2024. 6. 17.
[백준] 14940. 쉬운 최단거리 (C++) Key출력 조건과 출력되는 형태를 잘 봐야한다.시작 지점이 항상 [0][0]인 것은 아니다.그리고 항상 2차원 배열 문제에서 실수가 많이 나오는 부분인데, arr[x][y]에서 x는 행이고 y는 열이라는 것을 헷갈리면 안된다. (x,y)가 아니다!! Idea시작 지점에서 bfs를 진행하고, 사방에 만약 1이고 방문하지 않은 칸이 있다면 현재 지점+1 값으로 바꿔준다.보통 이런 문제는 bool 타입 visited 배열을 따로 만들어 방문 여부를 판단하는데, 나는 입력을 받을 때 입력값-2로 저장했다. 이렇게 하면 저장된 값이 유니크해져서 방문 배열을 만들지 않고도 방문 여부를 체크할 수 있다. 0이 시작점이고, 갈 수 있는 땅은 -1, 갈 수 없는 땅은 -2가 된다.따라서 범위를 넘지 않고 값이 -1이면 .. 2024. 6. 16.
[백준] 16113. 시그널 (C++) Key예외처리를 신경써줘야한다. 나의 경우엔 한가지 조건을 빠트려서 반례 첫번째 케이스부터 틀렸었다. Idea코드는 짧지만 아이디어를 생각해내는데 많은 시간이 걸렸다. 특히 푼 사람이 1000명도 안 되는 문제라 참고할 수 있는 풀이도 많지 않았다... 시그널 길이가 최대 10만이라 저장 안하고 푸는 방법을 생각해봤는데 방법이 없는 것 같다.  그래서 생각했던 방법이 N/5크기로 끊어서 저장한 후, 가로줄을 검사하며 #(검정)이 나오면 세로줄을 검사하는 것이다. 이 방법을 사용하면 0, 1, 6, 8과 5, 9는 두번째 줄도 검사하여야한다는 단점이 있었다. 또한, 1의 경우 가로 길이가 1이고 나머지는 3이라 다음 숫자를 찾을 때 1은 1칸을 건너뛰고 나머지 숫자는 3칸을 건너뛴다는 규칙성이 있는데, 내.. 2024. 6. 15.
[백준] 싸이버개강총회 (C++) Key단순히 주어진 시간과 input 시간을 비교하면 된다. 하지만!! 여기서 포인트는 모든 시간이 00:00 형태로 입력된다는 것이다. 어떻게 해야 더 간단하게 비교할 수 있는지 생각해봐야한다. 나도 처음에 풀 때 파싱을 시도했었고, 다른 분들의 풀이를 봤을 때도 문자열을 자르거나 시간을 분 단위로 바꾸는 풀이가 많았다. 하지만 그대로 비교해도 된다. Idea이름이 유니크한 값이므로 이걸 key로 하는 unordered map을 사용했다. 그리고 입력이 들어올 때마다 S,Q,E와 시간을 비교했다. 시간이 11:00AM 이런식으로 들어오지 않고 24시간 체계로 있는 그대로 들어오므로 변형을 할 필요가 없다. 처음에는 erase함수로 가운데 있는 : 를 제외하고 비교하는 방법을 생각했었다. 그런데 이건 s.. 2024. 6. 13.
프로그래머스 SQL - COALESCE COALESCE 함수NULL값을 다른 값으로 치환하는 함수를 말해보라고 하면 보통 NVL(Oracle), ISNULL(SQL Server), IFNULL(MySQL)을 떠올릴 것이다. 나도 오라클 문법으로 문제를 풀어서 NVL가 가장 먼저 떠올랐는데, 이렇게 DB 환경마다 문법이 다른 경우엔 같은 기능을 하면서 호환성이 더 좋은 함수를 알아둬야할 것 같았다.  그래서 알아본 게 COALESCE 함수이다. COALESCE VS NVLNVL은 두 개의 인자만 받고 COALESCE는 두 개 이상의 인자를 받는다. 인자 개수는 제한이 없다.NVL은 첫 번째 인자가 NULL일 경우, 두 번째 인자를 반환한다.COALESCE는 첫 번째로 만나는 NULL이 아닌 값을 반환한다. 이 때 평가 순서는 왼쪽에서 오른쪽이다.. 2024. 6. 13.