목록분류 전체보기 (384)
hwooo

https://leetcode.com/problems/move-pieces-to-obtain-a-string/description/ 풀이문제에서 L은 왼쪽으로만, R은 오른쪽으로만 움직일 수 있다.또한 해당 알파벳의 순서는 변할 수 없다. LRL로 입력된 문자열이라면 이 순서가 RLL, LLR등으로 바뀔 수 없다. 따라서 앞에서부터 차례로 순회하며 현재 만난 알파벳의 종류가 같은지 확인하며 탐색한다.또한 target의 L 위치는 항상 start보다 왼쪽에 있어야 하고, R의 위치는 오른쪽에 있어야 한다.C/C++ 코드class Solution {public: bool canChange(string start, string target) { int sIdx = 0, tIdx = 0; ..

https://leetcode.com/problems/adding-spaces-to-a-string/description풀이주어진 배열을 탐색하며 spaces의 사이에 있는 값을 string에 저장하고, spaces에 저장된 인덱스라면 해당 구간에 공백을 채워 넣는다C/C++ 코드class Solution {public: string addSpaces(string s, vector& spaces) { int size = s.size() + spaces.size(); string ans; int i = 0; for (i = 0; i Java 코드class Solution { public String addSpaces(String s, int[]..

https://leetcode.com/problems/minimum-limit-of-balls-in-a-bag/풀이이분탐색을 사용한다. 받을 수 있는 penalty의 범위를 start와 end로 잡아서 시행한다.중간 값을 penalty라 가정하고, 현재 nums에 있는 값을 penalty로 만들 때 필요한 총 횟수가 주어진 maxOperations보다 적다면 penalty 값이 현재 받을 수 있는 최소 penalty 값이다.이를 반복해서 가장 적은 penalty 값을 구해 반환한다.C/C++ 코드class Solution {public: int minimumSize(vector& nums, int maxOperations) { int start = 1, end = *max_element..

https://leetcode.com/problems/restore-ip-addresses/description/풀이문자열을 앞에서부터 1~3자리로 나누면서 나뉜 값의 범위가 (0, 255)인지 확인 후, 주소 형태의 문자열로 만드는 과정을 반복한다.주어진 문자열이 4개로 나뉘거나, 문자열을 다 사용했을 때의 조건을 확인해 답 배열에 추가해준다.C/C++ 코드class Solution {public: vector addresses; void getIP(string s, int cnt, string ip) { if (cnt == 4 || s.empty()) { // 4개로 나뉘어짐 && 주어진 문자열을 다 사용함 if (cnt =..

https://leetcode.com/problems/minimum-obstacle-removal-to-reach-corner/description/풀이처음엔 다익스트라처럼 우선순위 큐를 사용, 제거한 셀의 횟수가 가장 적은 것부터 탐색하며 답을 구했는데 시간이 너무 느렸다.다른 사람의 풀이를 보니, deque를 사용해 현재 탐색 중인 셀이비어있다면 해당 셀에서 제거 횟수가 올라가지 않으므로 큐의 앞에 넣고,비어있지 않다면 제거 횟수가 올라가 큐의 뒤에 넣어 탐색 순서를 맞춰 주었다.하나를 넣을 때마다 굳이 정렬할 필요가 없어서 해당 풀이가 훨씬 빨랐다.C/C++ 코드class Solution {public: typedef pair ii; int minimumObstacles(vector>& ..

https://leetcode.com/problems/array-nesting/description/ 풀이현재 지점에 방문하지 않았더라면 해당 지점을 방문해서 사이클 내의 노드 수를 찾는다.같은 사이클 내의 지점들은 모두 같은 수의 노드를 방문하고 사이클이 종료되므로 방문 처리 후 최대 노드 수를 갱신한다.코드class Solution {public: bool visited[1'000'000]; int dfs(vector& nums, int now, int nowDepth) { // 현재 지점이 방문했던 곳이라면 현재 깊이 반환 if (visited[now]) return nowDepth; visited[now] = true; ..

https://school.programmers.co.kr/learn/courses/30/lessons/42888 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr풀이입력 받은 문자열을 명령어, 고유 uid, 닉네임으로 나눈다.명령어가 Enter, Leave일 때 출력할 문자열을 만들어 저장한다(print). 이 때 닉네임은 고유 uid로 저장해둔다.명령어가 Enter, Change일 때는 입력받은 닉네임을 map(info)에 저장하여 고유 uid의 이름을 최신 순으로 저장한다.출력할 문자열들을 순회하며 고유 uid에 대응되는 닉네임을 info에서 대치하여 출력한다.코드#include #include #i..

https://leetcode.com/problems/jump-game-iii/풀이현재 인덱스를 큐에 저장하며 탐색한다.다음 인덱스를 탐색할 때는 배열의 범위인지, 이미 방문한 지점인지 확인하고 처음 방문한 지점일 때 큐에 삽입하여 탐색한다.코드class Solution {public: bool visited[50000]; bool canReach(vector& arr, int start) { queue q; q.push(start); visited[start] = true; while (!q.empty()) { int now = q.front(); q.pop(); // 현재 인덱스의 ..