목록Study/Algorithm (400)
hwooo
https://leetcode.com/problems/longest-substring-without-repeating-characters/ 풀이 반복문을 2번 순회하는 단순한 방법으로 풀려 했으나 문자열의 길이가 5만이었다. 생각을 하던 중 투포인터 비슷한 방식으로 풀어야겠다고 접근했다. 문자열을 저장할 배열의 초기 값을 index로 나올 수 없는 값으로 초기화했다. 문자열을 순회하면서 각 문자가 나온 위치를 저장 후, 만약 현 위치의 문자가 이미 나온 적 있는 문자라면 지금까지의 substring 길이 중 최댓값을 답으로 갱신했다. substring의 시작점 또한 갱신해서 문자열 끝까지 탐색하며 substring을 구했다. start = max(alpha[c] + 1, start); 시작 점 갱신 시 ..
https://school.programmers.co.kr/learn/courses/30/lessons/62048 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 y = h / w * x 의 식을 이용하여 x 값을 대입하여 각 x 값에 대한 y 값을구하고, 해당 y값 아래의 값을 가용할 수 있는 정사각형 개수로 더한다. 대각선 기준 아래쪽 값만 구하므로 해당 값에 2를 곱해주면 전체 가용 정사각형의 개수를 구할 수 있다. 아래 블로그를 참고하였고, 해당 블로그에 설명이 더 자세하게 나와 있으니 참고 하시면 좋을 것 같습니다. https://non-st..
https://school.programmers.co.kr/learn/courses/30/lessons/250136 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 BFS로 배열 전체를 순회하며 석유가 있는 구간과 해당 구간에서 얻을 수 있는 석유 양을 추출했다. 이 때 석유가 있는 열의 범위를 구해 범위의 끝을 석유 양을 저장하여 표시해줬고, 가로 열을 순회하며 가장 양이 많은 열의 값을 반환했다. 코드를 조금씩 바꾸며 내 코드가 얼마나 비효율적인지를 깨달을 수 있었던 좋은 시간이었다.. 생각을 더 해 본 후 코드를 짜는 습관을 들여야겠다. 답안 코..
https://school.programmers.co.kr/learn/courses/30/lessons/155651# 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 스트링을 시 + 분 형태로 나눠서 저장 후, 우선순위 큐에 끝나는 시각을 담았다. 저장된 예약 시작 시간을 순회하며 큐에 저장된 값과 비교 후, 예약 시간대를 하나씩 넣는다. 예약 시작 시간 > 끝나는 시간 (pq.top())이라면 해당 방에 새로운 예약을 넣으면 되므로 큐에 들어 있는 예약 일정을 꺼내준다. 코드 1 - 시, 분 분리 시, 분을 나눠서 계산했는데 합쳐서 계산하는 게 훨씬..
https://leetcode.com/problems/minimum-average-difference/description/ 풀이 - 1차 풀이 입력 받은 값에서 i번째 인덱스까지의 누적합을 저장 → sum 벡터 인덱스를 순회하며 sum[i] / i - (sum[size] - sum[i]) / (size - i) 계산, 최솟값과 그 때의 i 값 갱신2차 풀이 걸린 시간을 줄여보고자 위의 풀이에서 sum 값을 저장할 때 cal 벡터에 sum[i] / i 값을 함께 저장 수의 범위가 10^5 까지라 자료형을 long long으로 해야 함을 주의 코드 // 85ms, 87MB typedef long long ll; class Solution { public: int minimumAverageDifference..
https://www.acmicpc.net/problem/13414 13414번: 수강신청 입력 데이터는 표준 입력을 사용한다. 입력은 1개의 테스트 데이터로 구성된다. 입력의 첫 번째 줄에는 과목의 수강 가능 인원 K(1 ≤ K ≤ 100,000)와 학생들이 버튼을 클릭한 순서를 기록한 대기목 www.acmicpc.net 풀이 처음엔 vector에서 find 하면서 찾았는데 당연히 시간초과가 났다... 알고리즘을 보니 set이 있어서 정렬을 안 하고 어떻게 찾을까 하다가 vector를 이용한다는 방법을 들었다. 입력이 2번 이상 된 경우에는 뒤의 값만 저장이 되어야 하므로 먼저 vector에 모든 값을 저장한 후, 뒤의 값부터 set에 저장. 이 때 저장이 성공한 값에 대해서만 vector에 저장해 순..
https://school.programmers.co.kr/learn/courses/30/lessons/64065 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 1. 받은 문자열을 집합 단위로 자른다. 2. 집합을 하나씩 탐색하며 담긴 수를 벡터에 int형으로 담아준다. 3. 2의 벡터들을 하나의 벡터에 담는다. 4. 담은 벡터들을 원소 벡터의 길이가 오름차순이 되게 정렬한다. 5. 정렬된 벡터들을 앞에서부터 탐색하며 ans(답안) 배열에서 찾을 수 없는 수라면 ans 배열에 담고, 해당 원소(벡터)의 탐색을 중단한다. 먼저 받은 문자열을 튜플 단위..
https://school.programmers.co.kr/learn/courses/30/lessons/12924 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 처음에는 더하는 숫자의 개수를 기준으로 잡으려 하다보니 각 개수마다 시작하는 수를 어디로 잡아야 할지 고민했는데, 이와는 상관없이, 1~n까지의 숫자에서 값을 하나씩 더해가며 더한 수가 n이라면 답의 개수를 증가시키는 식으로 계산하면 됐다. 코드 #include #include using namespace std; int solution(int n) { int answer = 0; for(i..