profile
어려운 문제를 함께 풀어가는 것을 좋아합니다.

[LeetCode] Longest Substring Without Repeating Characters

Descirption Given a string s, find the length of the longest substring without repeating characters. 주어진 스트링에서 중복이 없는 가장 긴 서브 스트링의 길이를 찾는 문제다. Code 현재 서브 스트링의 시작 인덱스, 끝 인덱스 두개의 포인터를 두고, 현재 서브 스트링의 마지막 인덱스의 문자값과 중복되면 시작 인덱스를, 중복되지 않으면 끝 인덱스를 증가 시키는 것으로 문제를 해결 할 수 있다. 중복체크는 딕셔너리의 키 존재 여부로 판단하여, O(1)이고 한번의 순회에 두개의 포인터 중 하나는 반드시 증가하기 때문에, 최악의 경우 2n 만큼 순회한다. 따라서 시간 복잡도는 O(2n)이다.

2020년 10월 31일
·
0개의 댓글
·

[LeetCode] Add Two Numbers

Descirption You are given two non-empty linked lists representing two non-negative integers. The digits are stored in reverse order and each of their nodes contain a single digit. Add the two numbers and return it as a linked list. You may assume the two numbers do not contain any leading zero, except the number 0 itself. Code > 999 + 1 인 경우에는 캐리가 연쇄적으로 올라가기 때문에, 루프가 끝난 후에도 캐리값이 남아있는지 검사해야한다.

2020년 9월 20일
·
0개의 댓글
·

[BOJ] 1629 곱셈

문제 자연수 A를 B번 곱한 수를 알고 싶다. 단 구하려는 수가 매우 커질 수 있으므로 이를 C로 나눈 나머지를 구하는 프로그램을 작성하시오. 첫째 줄에 A, B, C가 빈 칸을 사이에 두고 순서대로 주어진다. A, B, C는 모두 2,147,483,647 이하의 자연수이다 풀이 지수 법칙을 이용하는 것이 핵심 10^10 을 구할 때, pow(10,10)은 10 * 10 * 10... 총 10번의 곱셈이 일어난다. 그러나 지수를 절반씩 나누어서 구하면 아래와 같다 10^10 = 10^5 * 10^5 // 10^5를 구해서 변수에 담아 곱해준다. 총 연산 1번 10^5 = 10^2 * 10^2 * 10 // 2번 10^2 = 10 * 10 // 1번 총 5번의 연산만에 구할 수 있다. 이런식으로 재귀 한 단계마다 문제의 크기가 절반으로 줄어들기 때문에 전체 문제의 수는 log n 이 된다. 로직은 아래와 같다 n == 짝수 a^n = a^

2019년 12월 3일
·
0개의 댓글
·

[BOJ] 9328 열쇠

문제보기 코드보기 분류 : BFS 난이도 : 3.5 / 5 놓칠 수 있는 조건이 많아 실수하기 쉬운 문제다 삽질 회고 문제를 읽으면서 중요하다 생각했던 부분은 시작 진입점과 문의 위치가 중요하다고 생각했다. 그래서 다음과 같이 알고리즘을 설계했다. 시작점을 벡터에 저장한다. 열쇠를 만났을 때, 대문자로 바꾸고 Map openDoor에 true 체크를 해준다. BFS 실행 여기에는 실수의 여지가 많다. 내가 코드를 작성하면 겪었던 실수는 다음과 같다 시작 지점을 제대로 벡터에 저장하지 못했다. 바운더리에 있는 열쇠를 시작 지점에 넣지 않았다. 바운더리에 있는 열 수 있는 문을 시작 지점에 넣지 않았다. 열쇠를 만나고 나면 문 위치

2019년 11월 14일
·
0개의 댓글
·

[SWEA] 등산로 조성

문제보기 코드보기 문제요약 등산로는 가장 높은 봉우리에서 시작 높은 지형에서 낮은 지형으로 가로 또는 세로 방향으로 연결 딱 한 곳을 정해서 최대 K 깊이만큼 지형을 깎는 공사를 할 수 있다. N * N = 64 K = 5 가장 높은 봉우리는 최대 5개 지형을 깎아 높이를 1보다 작게 만드는 것도 가능 문제회고 처음에 최대 K 깊이만큼 깎는다는 조건을 K만큼 깎는다로 잘못보고 접

2019년 10월 13일
·
0개의 댓글
·

[SWEA] 디저트 카페

문제링크 코드링크 문제요약 카페들 사이에는 대각선 방향으로 움직일 수 있는 길이 있다 디저트 카페투어는 어느 한 카페에서 출발하여 대각선 방향으로 움직이고 사각형 모양을 그리며 출발한 카페로 돌아와야한다. 또한 같은 종류의 디저트는 방문하지 않는다. 하나의 카페에서 디저트를 먹는 것도 안 된다. 왔던 길 을 다시 돌아가는 것도 안된다. 디저트를 가장 많이 먹을 수 있는 경로를 찾고 디저트 수를 출력, 먹을 수 없는 경우 -1 출력 문제접근 처음 문제를 읽고 4방향

2019년 10월 13일
·
0개의 댓글
·

[프로그래머스 - SQL]

없어진 기록 찾기 있었는데 있었는데요 없었습니다 오랜 기간 보호한 동물(1) 보호소에서 중성화한 동물 like문 글자수 매칭은 _

2019년 10월 12일
·
0개의 댓글
·

[SWEA] 미생물 격리

문제링크 코드링크 문제요약 각 군집들은 1시간마다 이동방향에 있는 다음 셀로 이동 경계에 도착하면 미생물 절반이 죽고, 이동방향이 반대로 바뀜, 홀수인 경우는 몫만! 미생물이 0이면 군집삭제 두 개 이상의 군집이 겹치면 합쳐짐, 미생물이 많은 녀석의 방향을 따른다 m 시간이 지났을 때 남은 미생물 수를 구하라 문제접근 2차원 배열 origin 과 box를 두개 두고, 각 군집마다 생존여부를 나타

2019년 10월 12일
·
0개의 댓글
·

[SWEA] 무선충전

문제 링크 코드 보기 문제요약 충전소가 있고, 충전소는 충전범위와 성능을 가진다. 충전범위는 상하좌우로 작용, 성능만큼 충전시켜준다 한 BC에 2 명의 사용자가 접속한 경우, 접속한 사용자의 수만큼 충전 양을 균등하게 분배 BC의 정보와 사용자의 이동 궤적이 주어졌을 때, 모든 사용자가 충전한 양의 합의 최댓값을 구하는 프로그램 작성 문제접근 충전소가 최대 8개, 충전범위 최대 4로 완전탐색시 O(8 * 16 *100) 예상된다. 문제는 같은 충전소에 들렀을 때의 중복처리이다. 이 부분에서

2019년 10월 9일
·
0개의 댓글
·