알고리즘 78

[프로그래머스] 징검다리 건너기 C++ (Lv.3)

https://school.programmers.co.kr/learn/courses/30/lessons/64062?language=cpp 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 이번 문제는 이분 탐색 또는 슬라이딩 윈도우 문제였습니다. 글쓴이는 이분 탐색으로 풀이했습니다. 💭 📝 문제 풀이 1. stones 배열 각 원소들의 값은 1 이상이므로 s는 1, e는 stones 배열의 최댓값으로 초기화 2. s

[프로그래머스] 풍선 터트리기 C++ (Lv.3)

https://school.programmers.co.kr/learn/courses/30/lessons/68646?language=cpp 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 이번 문제는 다이나믹 프로그래밍(DP) 또는 스택(stack) 문제였습니다. 1. 다이나믹 프로그래밍 DP 📝 문제 풀이 1. 각 풍선의 왼쪽 최솟값(leftMin)과 오른쪽 최솟값(rightMin)을 저장할 배열 선언 leftMin[0]은 a 벡터의 첫번째 값으로 초기화 rightMin[n-1]은 a 벡터의 마지막 값으로 초기화 2. for 문을 돌며 각 풍선의 왼쪽 최솟..

[프로그래머스] 구명보트 C++ (Lv.2)

https://school.programmers.co.kr/learn/courses/30/lessons/42885 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 이번 문제는 탐욕법(Greedy) 문제였습니다. 📝 문제 풀이 1. 구명보트는 최대 2명이 탈 수 있으므로 두 개의 인덱스 s, e를 선언 2. 몸무게를 오름차순으로 정렬 ⭐️ 3. 몸무게가 가장 적은 사람과 가장 많은 사람의 합이 limit보다 작거나 같다면 구명보트에 함께 탈 수 있으므로 s++ 4. while 문을 한번 돌 때마다 무조건 구명보트가 1번 사용되므로 e--, answer++ ..

[프로그래머스] 등대 C++ (Lv.3)

https://school.programmers.co.kr/learn/courses/30/lessons/133500 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 이번 문제는 dfs 문제였습니다. 📝 문제 풀이 1. 등대의 연결 정보를 info 벡터에 저장 2. 등대 사이의 뱃길이 n-1개 이므로 트리. 1을 루트 노드로 하여 dfs 수행 현재 노드와 연결된 노드가 부모 노드가 아니라면 dfs 수행 각 노드의 dfs 수행이 끝난 후, 자식과 부모 등대 모두 불이 꺼져 있다면 부모 등대 불 켜주기 isLightOn[node] = true 등대에 불을 켜 줄..

[프로그래머스] 부대복귀 C++ (Lv.3)

https://school.programmers.co.kr/learn/courses/30/lessons/132266 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 이번 문제는 bfs 문제였습니다. 📝 문제 풀이 1. 길 연결 정보를 info 벡터에 저장 2. sources 벡터를 순회하며 bfs 수행 ➡️ sources[i]에서 강철 부대까지의 최단 거리 탐색 3. result를 갱신한 적이 없으면 answer.push_back(-1) 4. 최단 경로를 찾았다면 answer.push_back(result) 👩🏻‍💻 C++ 코드 #include #inclu..

[프로그래머스] 할인 행사 C++ (Lv.2)

https://school.programmers.co.kr/learn/courses/30/lessons/131127 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 이번 문제는 해시(key-value) 문제였습니다. 📝 문제 풀이 1. 10일 연속으로 할인하는 제품과 수량을 담을 map 객체 생성 ⭐️ 2. discount.size() - 9 만큼 for문을 돌면서 bool 타입의 변수로 회원가입을 할 수 있는지 체크 3. 원하는 제품과 수량이 할인하는 날짜와 10일 연속으로 일치한다면 answer++ 4. 10일 중 첫째 날의 수량은 1 감소시키고 다음 ..

[프로그래머스] 귤 고르기 C++ (Lv.2)

https://school.programmers.co.kr/learn/courses/30/lessons/138476 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 이번 문제는 구현 문제였습니다. 📝 문제 풀이 1. kind 벡터에 귤의 종류의 개수를 카운트 2. 서로 다른 종류가 최소가 되도록 귤을 담아야 하므로 kind 벡터를 내림차순 정렬 (종류가 많은 귤부터 담기 위해) 3. kind 벡터의 귤을 순서대로 담다가 현재 담아야 할 귤의 개수가 k 크거나 같아지면 for문 종료 👩🏻‍💻 C++ 코드 #include #include #include #de..

[프로그래머스] 연속된 부분 수열의 합 C++

https://school.programmers.co.kr/learn/courses/30/lessons/178870 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 이번 문제는 투 포인터 문제였습니다. 📝 문제 풀이 1. 구하려는 부분 수열의 처음 위치 s와 마지막 위치 e를 각각 0으로 초기화 2. 부분 수열의 합을 sequence[0]으로 초기화 (sequence[0]은 부분 수열 합의 최솟값) 3. 부분 수열의 길이는 sequence.size() + 1로 설정 (부분 수열 길이의 최댓값은 sequence.size()이기 때문에) 4. sum < k ➡..

[프로그래머스] 리코쳇 로봇 C++

https://school.programmers.co.kr/learn/courses/30/lessons/169199 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 이번 문제는 bfs 문제였습니다. 📝 문제 풀이 1. 게임 보드판의 로봇의 처음 위치와 목표 지점을 찾아 각각 start, goal 객체에 저장 2. bfs 수행 로봇의 처음 위치와 이동 횟수 0을 큐(queue)에 삽입 로봇의 처음 위치는 방문 체크 visited[start.first][start.second] = true; 현재 위치에서 상, 하, 좌, 우로 이동했을 경우 벽이 아니거나 (..

[프로그래머스] 모두 0으로 만들기 C++ (Lv.3)

https://school.programmers.co.kr/learn/courses/30/lessons/76503?language=cpp 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 이번 문제는 dfs 문제였습니다. 📝 문제 풀이 1. 연산을 위한 weight 벡터를 생성하여 a 벡터와 동일하게 초기화 2. info 벡터에 점들의 연결 정보를 저장 3. 루트 노드를 0으로 시작하여 dfs 수행 (루트 노드의 부모 노드는 자기 자신) 현재 노드와 연결된 노드가 부모 노드가 아니라면 dfs 수행 더 이상 탐색할 노드가 없다면 (리프 노드에 도달했다면) ⭐️..

반응형