알고리즘
23 posts
표편집 [Lv3]

1. 문제소개 프로그래머스 표편집 2. 문제풀이 첫시도 처음에는 정직하게 모든 시도에 따라 움직이며 제거 하고 제거한 index를 stack에 보관하려고 했다. 하지만 이 때 저장되는 index는 원래의 index를 저장하지 못했는데, 예를 들어 stack에 [00000] 만 저장되는 경우 였다. 이 경우를 해결하기 위해서, node의 개념을 도입하였고, 제거된 경우 deleted 속성을 부여하기로 하였다. 아래의 코드는 시간초과로 인해 실패한 코드입니다. 아마도 원래의 위치를 찾기 위해서 하나씩 이동해야한다는 점이 크게 작용한것으로 예측할 수 있습니다. hashmap을 사용하는것을 검토할 필요가 있을것으로 생각합니다. 결국 hashmap으로도 실패를 경험하고 다른 풀이를 보게 되었습니다. 다른 풀이에서는 node를 사용하였는데 앞선 풀이와 같았으나, prev, next 를 사용한 방식을 통해서 up , down에 압도적인 시간 차를 줄일 수 있었다는 점이 가장 큰 차이인것 같습니…

April 06, 2023
알고리즘
연속 펄스 부분수열의 합 [Lv3]

1. 문제소개 프로그래머스 연속 펄스 부분수열의 합 2. 문제풀이 처음 생각은 이렇다. [-1 ,1 , -1, … ]과 [1,-1,1 , …] 로 이루어진 두 수열을 가지고 곱하여 만들어진 두 수열의 가장 큰 부분수열의 합을 구하는 것이다. 대략적인 계획은 세웠으나 완전탐색은 말이 안되는 방법이다. 당연히 시간초과가 발생할 것이라 예상했다. 이중포인터를 사용하되 음의 정수의 누적을 체크하기로 하였다. 3. 코드 Reference 아직 배움의 단계라 정확한 정보가 아닐 수 있습니다.😂 피드백은 seoungin1228@gmail.com 으로 부탁드리겠습니다☺️

April 05, 2023
알고리즘
다단계 칫솔 판매하기 [Lv3]

1. 문제소개 프로그래머스 다단계 칫솔 판매하기 2. 문제풀이 처음 보자마자 그래프를 생성한 후 dfs로 풀어준다면 쉽게 풀수 있으리라 생각했다. 생성한 그래프는 다음과 같다. 다음과 같이 테스트케이스는 전부 통과하지만 일부 런타임에러와 시간초과가 발생했다. 시간초과가 발생한다는 점에서 알고리즘이 잘못되었을지 모른다는 의심이 들었다 하지만 알고보니 문제의 원인은 크게 멀지 않은 곳에 있었는데, 다름이 아니라 종료조건을 부족하게 적은 탓이었다. 만약 다음 인자로 넘겨줄 원소가 0원이라면 이때, 더이상 dfs 가 돌지 않아야 하는데 더 돌기 때문이다. 3. 코드 Reference 아직 배움의 단계라 정확한 정보가 아닐 수 있습니다.😂 피드백은 seoungin1228@gmail.com 으로 부탁드리겠습니다☺️

April 02, 2023
알고리즘
풍선 터트리기 [Lv3]

1. 문제소개 프로그래머스 풍선 터트리기 2. 문제풀이 처음 보자마자 dfs 로 완전탐색으로 풀려고 했던 문제다. 하지만 문제 조건의 a의 길이를 본후 당연히 시간초과가 날것이라 생각했다. 그다음 생각했던 방식은 dp 로 문제 풀이를 진행하는 것이다. dp[i][j] 에서 dp[i][j]는 i 번째부터 j 번째까지의 수 중에서 발생할 수 있는 수를 의미한다. 하지만 이 방식도 결국 기각되었는데 이때, 반환하는 배열에 대해서 작은 값을 터트린 경우를 모두 닮는것은 결국 완전탐색과 다를것이 없다. 그래서 다음과 같은 방법을 생각하게 되었다. 작성한 테스트 코드는 다음과 같다. [-16,27,65,-2,58,-92,-71,-68,-61,-33] 6 [27, 65, -2, -16, -92, -71, -68, -61, -33] 7 단순히 -16과 -2의 위치에 따라서 갯수가 추가가 되는것을 확인할 수 있었는데, 규칙은 바로 해당 수의 배열에서 가장 작은 수 와 두번째로 작은 수에 대해서 정…

April 02, 2023
알고리즘
가장 긴 펠린드롭 [Lv3]

1. 문제소개 프로그래머스 가장 긴 펠린드롭 2. 문제풀이 다소 애를 먹었던 문제이다. 제한조건을 고려했을때, 모두 탐색을 사용하게 된다면 문제가 발생할 것이라 생각했다. 그에 따라 생각이 나는 알고리즘은 사실 dp였다. dp로 이 문제를 풀때 중요한 것은, 일반적으로 i , j 인덱스가 함께 양의 방향으로 이동하는 경우지만 이번 문제에서는 그게 아니라 양쪽 방향으로 이동하며, 포함하는 문자열을의 펠린드롭 여부를 닮게 된다. 3. 코드 Reference 아직 배움의 단계라 정확한 정보가 아닐 수 있습니다.😂 피드백은 seoungin1228@gmail.com 으로 부탁드리겠습니다☺️

March 31, 2023
알고리즘
합승택시요금 [Lv3]

1. 문제소개 프로그래머스 합승택시요금 2. 문제풀이 문제를 보자마자 일반적으로 사용하던 dfs, dp 등의 방식으로는 풀수 없음을 깨닫고 다른 방식의 풀이를 해야겠다는 생각이 들었습니다. 빠르게 그래프 관련풀이를 공부하고 풀게 되었습니다. 3. 코드 Reference 아직 배움의 단계라 정확한 정보가 아닐 수 있습니다.😂 피드백은 seoungin1228@gmail.com 으로 부탁드리겠습니다☺️

March 31, 2023
알고리즘
110 옮기기 [Lv3]

1. 문제소개 프로그래머스 110 옮기기 2. 문제풀이 문제를 보자마자 생각한 풀이 입니다! 하지만 풀지는 못했는데 다음과 같은 코드에서는 예외처리가 잘 안됩니다. 예시 2번에서 나온 방식은 110을 제일 뒤로 옮기는 방식이었는데 이걸 좀 다르게 이해한것이 문제였습니다. 테케는 모두 통과했지만 결국 실패하고 말았다. 시간초과가 뜬것으로 보아 알고리즘 상 문제가 발생한것이라 추축할 수 있다. 결국 해결책을 찾지 못하고 아래의 코드를 참고하게 되었다. 3. 코드 정리 생각보다 간단하게 풀수 있었을지도 모를 문제였다는 생각이 들었다. 저 풀이에서 볼 수 있듯이 stack을 통해 잠재적으로 발생할 수 있는 110에 대해서 모두 예외처리를 진행해 주었는데, 아쉽게도 문제를 풀 당시에는 전혀 생각지도 못했던 부분이다. 또한 본문에서 stack을 재활용하는 부분이 있었는데 이또한 신기했다. 단순히 지역변수로서 사용된것이 아니라 더 복합적으로 사용된것에 감탄이 나온다. Reference 아직 배…

March 21, 2023
알고리즘
자물쇠와 열쇠 [Lv3]

1. 문제소개 프로그래머스 자물쇠와 열쇠 2. 문제풀이 지금까지 안풀고 넘겨왔지만 지금은 풀어야 할때다…! 해당문제는 Key를 회전 시켜주는 것이 중요하다. 2중 배열의 회전 기능을 구현해보자 시계방향 회전의 경우 (홀수크기 n*n) n=5 (3,0) => (0,1) => (1,4) => (4,3) (y,x) => (x, n-y) 의 공식을 가지게 됩니다. 그렇다면 이 문제는 DFS 인가? 아마 모든 경우의 수를 샌다면 엄청나게 많은 경우가 발생하게 됩니다. 1번 실행시 경우의 수 5번이기 때문이다. (상하좌우 + 회전) 위의 생각은 다음과 같다 우선 홈의 개수와 돌출부의 개수가 같은지만 확인하고 회전을 시키려고 하였으나, 이동과 회전이 번갈아서 시행되는 경우가 존재한다는것을 배제하였다. 결국 해답을 찾지 못해 다른 사람의 풀이를 참고하게 되었는데, 어렵게 생각할것 없이 모든 경우를 순회하며 찾아내면 되는것이었다. 여기서 중요한 생각은 회전은 4번이상 하지 않아도 되므로 총 회전…

March 21, 2023
알고리즘
불량 사용자 [Lv3]

1. 문제소개 프로그래머스 네트워크 2. 문제풀이 생각보다 까다로운 문제였으며 DFS로 문제를 해결하는 경우 ”****“이 존재할 때가 최대의 시간복잡도를 가지게 된다. 해당 경우에 대한 예외처리가 필요하다. 우선 문제에 대한 조각을 나눠야 한다. 두개의 문자열에 대한 banned 여부를 파악 파악된 결과를 바탕으로 possible_banned_list를 작성해야 한다. possible_banned_list를 이용하여 dfs를 통해 answer_array 를 생성한다. 3번의 경우 복잡도가 크게 증가 할 수 있으며, 중복을 제거하며 앞서서 언급된 string은 제거한다. 3. 코드 Reference 아직 배움의 단계라 정확한 정보가 아닐 수 있습니다.😂 피드백은 seoungin1228@gmail.com 으로 부탁드리겠습니다☺️

March 07, 2023
알고리즘
거스름돈 [실버 5]

1. 문제소개 문자열 집합 춘향이는 편의점 카운터에서 일한다. 손님이 2원짜리와 5원짜리로만 거스름돈을 달라고 한다. 2원짜리 동전과 5원짜리 동전은 무한정 많이 가지고 있다. 동전의 개수가 최소가 되도록 거슬러 주어야 한다. 거스름돈이 n인 경우, 최소 동전의 개수가 몇 개인지 알려주는 프로그램을 작성하시오. 예를 들어, 거스름돈이 15원이면 5원짜리 3개를, 거스름돈이 14원이면 5원짜리 2개와 2원짜리 2개로 총 4개를, 거스름돈이 13원이면 5원짜리 1개와 2원짜리 4개로 총 5개를 주어야 동전의 개수가 최소가 된다. 2. 문제풀이 그리디로 문제를 풀게 되면 문제가 생김을 바로 확인할 수 있다. 마지막에 거스름돈이 13원일때 , 5 _ 2 + 1 _ 3 이 되면 동전이 5개가 된다. 하지만 5 * 1 + 2 *3 이 된다. —> 알고보니 1원짜리 거스름돈은 불가능하다고 한다. —> 풀이가 몇번 실패했었는데 그 이유는 자료형 때문이었다. 1 이거나 3일 때 예외처리를 해주어야…

December 15, 2022
알고리즘
문자열 집합 [실버 3]

1. 문제소개 문자열 집합 총 N개의 문자열로 이루어진 집합 S가 주어진다. 입력으로 주어지는 M개의 문자열 중에서 집합 S에 포함되어 있는 것이 총 몇 개인지 구하는 프로그램을 작성하시오. 2. 문제풀이 앞서 풀었던 나는야 포켓몬 마스터 문제와 같이 입력받은 문자열을 바탕으로 hash map을 만들면 쉽게 풀수 있을것이라 기대할 수 있다. 문제에서 특별하게 처리해야할 예외는 보이지 않으므로 바로 시도한다. 하지만 이렇게 작성했을대 문제가 발생했다. 예제는 통과하지만 백준에서 4%에서 막히는것을 확인할 수 있었는데 그 이유를 확인해보자 답을 알았다.. 알고 보니 아래 for문에서 N부터 시작했기 떄문이다;; N+1부터라면 큰 무리 없이 문제를 풀 수 있다. 3. 코드 4. 배운 점 for문의 시작지점을 잘보자 Reference 아직 배움의 단계라 정확한 정보가 아닐 수 있습니다.😂 피드백은 seoungin1228@gmail.com 으로 부탁드리겠습니다☺️

December 12, 2022
알고리즘
나는야 포켓몬 마스터 이다솜 [실버 4]

1. 문제소개 나는야 포켓몬 마스터 이다솜 첫째 줄에는 도감에 수록되어 있는 포켓몬의 개수 N이랑 내가 맞춰야 하는 문제의 개수 M이 주어져. N과 M은 1보다 크거나 같고, 100,000보다 작거나 같은 자연수인데, 자연수가 뭔지는 알지? 모르면 물어봐도 괜찮아. 나는 언제든지 질문에 답해줄 준비가 되어있어. 둘째 줄부터 N개의 줄에 포켓몬의 번호가 1번인 포켓몬부터 N번에 해당하는 포켓몬까지 한 줄에 하나씩 입력으로 들어와. 포켓몬의 이름은 모두 영어로만 이루어져있고, 또, 음… 첫 글자만 대문자이고, 나머지 문자는 소문자로만 이루어져 있어. 아참! 일부 포켓몬은 마지막 문자만 대문자일 수도 있어. 포켓몬 이름의 최대 길이는 20, 최소 길이는 2야. 그 다음 줄부터 총 M개의 줄에 내가 맞춰야하는 문제가 입력으로 들어와. 문제가 알파벳으로만 들어오면 포켓몬 번호를 말해야 하고, 숫자로만 들어오면, 포켓몬 번호에 해당하는 문자를 출력해야해. 입력으로 들어오는 숫자는 반드시 1보…

December 12, 2022
알고리즘
3*n 타일링 JS [Lv2]

1. 문제소개 3*n 타일링 가로 길이가 2이고 세로의 길이가 1인 직사각형 모양의 타일이 있습니다. 이 직사각형 타일을 이용하여 세로의 길이가 3이고 가로의 길이가 n인 바닥을 가득 채우려고 합니다. 타일을 채울 때는 다음과 같이 2가지 방법이 있습니다 타일을 가로로 배치 하는 경우 타일을 세로로 배치 하는 경우 예를들어서 n이 8인 직사각형은 다음과 같이 채울 수 있습니다. 직사각형의 가로의 길이 n이 매개변수로 주어질 때, 이 직사각형을 채우는 방법의 수를 return 하는 solution 함수를 완성해주세요. 2. 문제풀이 각 시행별 필요사항들을 적어서 표현해야만 했다. 가장 이해가 잘되었던 사진을 첨부하여 해석합니다 사진을 통해서 볼 수 있듯 n=8일때 입니다. 3. 코드 Reference 아직 배움의 단계라 정확한 정보가 아닐 수 있습니다.😂 피드백은 seoungin1228@gmail.com 으로 부탁드리겠습니다☺️ 본문의 사진 출처

October 03, 2022
알고리즘
다음 큰 숫자 JS [Lv2]

1. 문제소개 다음 큰 숫자 자연수 n이 주어졌을 때, n의 다음 큰 숫자는 다음과 같이 정의 합니다. 조건 1. n의 다음 큰 숫자는 n보다 큰 자연수 입니다. 조건 2. n의 다음 큰 숫자와 n은 2진수로 변환했을 때 1의 갯수가 같습니다. 조건 3. n의 다음 큰 숫자는 조건 1, 2를 만족하는 수 중 가장 작은 수 입니다. 예를 들어서 78(1001110)의 다음 큰 숫자는 83(1010011)입니다. 자연수 n이 매개변수로 주어질 때, n의 다음 큰 숫자를 return 하는 solution 함수를 완성해주세요. 제한 사항 n은 1,000,000 이하의 자연수 입니다. 2. 문제풀이 이전에서 이진변환 반복하기를 통해서 익힌 toString을 통한 이진수로의 변환을 이용합니다. 이동한 후 map 함수를 통해서 각 1을 count를 하여 수를 늘려줍니다. 3. 코드 4. 정리! 1을 셀수 있는 방법이 굉장히 많지만 저는 간단하게 배열로 전환한 후 map을 통해서 1인 경우 co…

October 03, 2022
알고리즘
숫자의 표현 JS [Lv2]

1. 문제소개 숫자의 표현 Finn은 요즘 수학공부에 빠져 있습니다. 수학 공부를 하던 Finn은 자연수 n을 연속한 자연수들로 표현 하는 방법이 여러개라는 사실을 알게 되었습니다. 예를들어 15는 다음과 같이 4가지로 표현 할 수 있습니다. 1 + 2 + 3 + 4 + 5 = 15 4 + 5 + 6 = 15 7 + 8 = 15 15 = 15 자연수 n이 매개변수로 주어질 때, 연속된 자연수들로 n을 표현하는 방법의 수를 return하는 solution를 완성해주세요. 2. 문제풀이 초기에 규칙성을 찾아보려고 했으나 찾을 수 없었습니다. 홀 , 짝 혹은 약수들간의 관계를 찾아보려고 했습니다. 하지만 총 입력되는 문자열의 크기가 10000이라는 나름 합리적인 값이라는 생각에 완전탐색을 트라이 하게 되었습니다. 여기에는 조금더 합리적인 근거가 있었는데 하나의 시작지점에서는 하나의 수식만이 만들어진다는 점이었습니다. 3. 코드 여기까지가 완전탐색을 사용한 풀이였습니다. 일반적인 경우 모…

October 03, 2022
알고리즘
피보나치 수열 JS [Lv2]

1. 문제소개 피보나치 수열 피보나치 수는 F(0) = 0, F(1) = 1일 때, 1 이상의 n에 대하여 F(n) = F(n-1) + F(n-2) 가 적용되는 수 입니다. 예를들어 F(2) = F(0) + F(1) = 0 + 1 = 1 F(3) = F(1) + F(2) = 1 + 1 = 2 F(4) = F(2) + F(3) = 1 + 2 = 3 F(5) = F(3) + F(4) = 2 + 3 = 5 와 같이 이어집니다. 2 이상의 n이 입력되었을 때, n번째 피보나치 수를 1234567으로 나눈 나머지를 리턴하는 함수, solution을 완성해 주세요. 2. 문제풀이 DP를 이용해 문제를 풀어냅니다. 가장 기본 형태에 해당하는 문제 이며 각 시행의 결과를 %1234567로 나누어 주는 과정이 필요합니다. 첫 시행에서 return 되는 결과에만 % 1234567을 해주어 틀렸습니다. 3. 코드 4. 정리! Reference 아직 배움의 단계라 정확한 정보가 아닐 수 있습니다.😂 피…

October 03, 2022
알고리즘
올바른 괄호 JS [Lv2]

1. 문제소개 올바른 괄호 괄호가 바르게 짝지어졌다는 것은 ’(’ 문자로 열렸으면 반드시 짝지어서 ’)’ 문자로 닫혀야 한다는 뜻입니다. 예를 들어 ”()()” 또는 ”(())()” 는 올바른 괄호입니다. ”)()(” 또는 ”(()(” 는 올바르지 않은 괄호입니다. ’(’ 또는 ’)’ 로만 이루어진 문자열 s가 주어졌을 때, 문자열 s가 올바른 괄호이면 true를 return 하고, 올바르지 않은 괄호이면 false를 return 하는 solution 함수를 완성해 주세요. 2. 문제풀이 stack을 통해서 괄호가 input될때, stack에 가장 최근에 입력된 요소와 비교해서 연산을 진행합니다. array기본 연산들중 하나인 pop을 통해서 아주 손쉽게 해결할 수 있습니다. 3. 코드 4. 정리! Reference 아직 배움의 단계라 정확한 정보가 아닐 수 있습니다.😂 피드백은 seoungin1228@gmail.com 으로 부탁드리겠습니다☺️

October 03, 2022
알고리즘
이진변환 반복하기 JS [Lv2]

1. 문제소개 이진변환 반복하기 0과 1로 이루어진 어떤 문자열 x에 대한 이진 변환을 다음과 같이 정의합니다. x의 모든 0을 제거합니다. x의 길이를 c라고 하면, x를 “c를 2진법으로 표현한 문자열”로 바꿉니다. 예를 들어, x = “0111010”이라면, x에 이진 변환을 가하면 x = “0111010” -> “1111” -> “100” 이 됩니다. 0과 1로 이루어진 문자열 s가 매개변수로 주어집니다. s가 “1”이 될 때까지 계속해서 s에 이진 변환을 가했을 때, 이진 변환의 횟수와 변환 과정에서 제거된 모든 0의 개수를 각각 배열에 담아 return 하도록 solution 함수를 완성해주세요. 2. 문제풀이 js에 내장된 2진 변환 코드 방법을 알고 있다면 훨씬 빠르게 풀 수 있습니다. 하지만 아닌 2진 변환을 직접 구현하여 문제를 해결하였습니다. 문제는 크게 3부분으로 구성되어 있습니다. solution 함수 : 문자열을 받아서 while문을 통해 제한조건까지 함수…

October 02, 2022
알고리즘
최솟값 만들기 JS [Lv2]

1. 문제소개 최솟값 만들기 길이가 같은 배열 A, B 두개가 있습니다. 각 배열은 자연수로 이루어져 있습니다. 배열 A, B에서 각각 한 개의 숫자를 뽑아 두 수를 곱합니다. 이러한 과정을 배열의 길이만큼 반복하며, 두 수를 곱한 값을 누적하여 더합니다. 이때 최종적으로 누적된 값이 최소가 되도록 만드는 것이 목표입니다. (단, 각 배열에서 k번째 숫자를 뽑았다면 다음에 k번째 숫자는 다시 뽑을 수 없습니다.) 2. 문제풀이 배열의 크기가 1000 이므로 BFS로 푸는 경우 총 연산의 가짓수는 1000! * 1000!가 된다. 따라서 이 방법을 사용해서는 안된다. 반대로 가장 최대가 되는 방법을 생각해본다. 당연히 가장 값이 비슷한 값들이 곱해지는 것이다. ex) 두수의 합이 10일때, 5 * 5 가 가장 큰 경우의 수다. A는 오름차순으로 졍렬 , B는 내림차순으로 정렬 후 각 원소를 서로 곱해준다. 3. 코드 4. 정리! 최댓값 최솟값 문제에서 정리한 sort를 사용합니다. …

October 02, 2022
알고리즘
JadenCase 만들기 JS [Lv2]

1. 문제소개 JadenCase 만들기 JadenCase란 모든 단어의 첫 문자가 대문자이고, 그 외의 알파벳은 소문자인 문자열입니다. 단, 첫 문자가 알파벳이 아닐 때에는 이어지는 알파벳은 소문자로 쓰면 됩니다. (첫 번째 입출력 예 참고) 문자열 s가 주어졌을 때, s를 JadenCase로 바꾼 문자열을 리턴하는 함수, solution을 완성해주세요. 2. 문제풀이 문자열 -> 배열 후에 조건에 맞추어 출력합니다. (문제는 JadenCase만들기 인데 왜 제목은 JadenCase가 아니지…?) 3. 코드 4. 정리! 신규 아이디 추천 문제에서 사용한 toLowerCase()의 반대 버전인 toUpperCase()를 각 원소별로 사용합니다. +) 다른 분의 풀이 입력받은 문자열을 공백을 기준으로 나누어 배열로 만들어 준다. 배열로 나누어진 각 원소들의 첫문자는 toUpperCase 를 통해서 대문자로 만들어준뒤 나머지 문자들을 첫 원소를 제외하고 모두 toLowerCase를 사용…

October 02, 2022
알고리즘
최댓값과 최솟값 JS [Lv2]

1. 문제소개 최댓값과 최솟값 문자열 s에는 공백으로 구분된 숫자들이 저장되어 있습니다. str에 나타나는 숫자 중 최소값과 최대값을 찾아 이를 “(최소값) (최대값)“형태의 문자열을 반환하는 함수, solution을 완성하세요. 예를들어 s가 “1 2 3 4”라면 “1 4”를 리턴하고, “-1 -2 -3 -4”라면 “-4 -1”을 리턴하면 됩니다. 2. 문제풀이 sort를 적절하게 사용하여 풀 수 있는 문제입니다. 3. 코드 4. 정리! sort는 js에서 제공되는 아주 편리한 정렬 함수입니다. 일반적으로 배열.sort()를 사용하는 경우 아스키 코드를 기준으로 정렬이 되기 때문에 특별한 조치를 취해 주어야 합니다. sort((a,b) => a-b) 는 일반적으로 오름차순 정렬이 수행됩니다. 그 이유를 확인해보겠습니다. Reference 아직 배움의 단계라 정확한 정보가 아닐 수 있습니다.😂 피드백은 seoungin1228@gmail.com 으로 부탁드리겠습니다☺️

October 02, 2022
알고리즘
신규 아이디 추천 JS [Lv1]

1. 문제소개 2021 KAKAO BLIND RECRUITMENT의 신규 아이디 추천 문제 1단계 new_id의 모든 대문자를 대응되는 소문자로 치환합니다. 2단계 newid에서 알파벳 소문자, 숫자, 빼기(-), 밑줄(), 마침표(.)를 제외한 모든 문자를 제거합니다. 3단계 new_id에서 마침표(.)가 2번 이상 연속된 부분을 하나의 마침표(.)로 치환합니다. 4단계 new_id에서 마침표(.)가 처음이나 끝에 위치한다면 제거합니다. 5단계 new_id가 빈 문자열이라면, new_id에 “a”를 대입합니다. 6단계 new_id의 길이가 16자 이상이면, new_id의 첫 15개의 문자를 제외한 나머지 문자들을 모두 제거합니다. 만약 제거 후 마침표(.)가 new_id의 끝에 위치한다면 끝에 위치한 마침표(.) 문자를 제거합니다. 7단계 new_id의 길이가 2자 이하라면, new_id의 마지막 문자를 new_id의 길이가 3이 될 때까지 반복해서 끝에 붙입니다. 2. 문제풀이…

October 01, 2022
알고리즘
네트워크 [Lv3]

1. 문제소개 프로그래머스 네트워크 네트워크란 컴퓨터 상호 간에 정보를 교환할 수 있도록 연결된 형태를 의미합니다. 예를 들어, 컴퓨터 A와 컴퓨터 B가 직접적으로 연결되어있고, 컴퓨터 B와 컴퓨터 C가 직접적으로 연결되어 있을 때 컴퓨터 A와 컴퓨터 C도 간접적으로 연결되어 정보를 교환할 수 있습니다. 따라서 컴퓨터 A, B, C는 모두 같은 네트워크 상에 있다고 할 수 있습니다. 컴퓨터의 개수 n, 연결에 대한 정보가 담긴 2차원 배열 computers가 매개변수로 주어질 때, 네트워크의 개수를 return 하도록 solution 함수를 작성하시오. 2. 문제풀이 대표적인 dfs 문제이다. DFS 문제 풀이에는 다음과 같은 요소에 집중하는 것이 중요하다. 대부분의 문제가 DFS로 풀리긴 하지만 막대한 시간이 소요 된다. 따라서 다음과 같이 graph를 순회하거나 Node를 경유해야하는 경우에 제한하여 사용하는 것이 중요하다. DFS 의 대표적인 특징은 제귀함수에서 기인하다. 그…

March 03, 2022
알고리즘