표편집 [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
알고리즘
Network Layer (3계층)

😎 컴퓨터네트워크 3계층이란?? network Layer의 주된 역할은 다른 네트워크 간의 통신을 가능하게 하는것입니다. 2계층인 Link layer 까지는 물리적으로 어느정도 인접한 상태를 고려했다면 이제는 전혀 다른 네트워크 간의 통신을 고려합니다. 이때, 중요한 것은 2가지입니다. 해당 계층 “내부”에서의 패킷의 흐름 (data plane) 해당 source -> destination 으로 흐르는 길을 찾기 (control plane) Routing protocol Routing Protocol이란 Routing을 정하는 방식들을 의미합니다. 크게 두가지로 이루어져 있습니다! 1. Link State 모든 라우터들이 다른 링크들에 대한 “모든” Cost를 알고 있는 경우 입니다. 이 방식에서는 모든 노드에 대한 Link Cost를 알고 있기 때문에 다익스트라 알고리즘을 사용합니다. (전체 공유!!) image TSP를 떠올리면 쉽습니다. 위는 다익스트라자에서 길을 찾는 방법이…

October 17, 2022
짧은지식
Link layer

😎 컴퓨터네트워크 2계층이란?? Link layer로 불리며 인접한 노드 끼리의 데이터를 전송하는 것을 관리합니다. 또한 이 과정에서 발생할 수 잇는 오류를 감지하고 수정합니다. image node는 모든 통신에 관련된 entity를 의미합니다. 각 노드간의 연결은 Link를 통해서 연결이 되어 있으며 이 Link의 종류는 총 3가지가 있습니다. wired Links wirless Links LANs 데이터 링크 계층은 2개의 부계층으로 구성됩니다. LLC 와 MAC입니다. LLC는 논리적인 부분으로 네트워크 계층과 연결되며 Frame을 만드는것에 기여합니다 MAC 은 물리적인 부분으로 1계층과 연결되어 있습니다. data-link layer는 물리적으로 연결된 node에 전송할 데이터의 frame을 만듭니다 직접 전송은 1계층에서 관리하며 어떻게 보내는지는 관심이 없습니다 image framing, Link access framing : 3계층에서 받은 데이터를 2계층에서 보낼 …

October 12, 2022
짧은지식
릴케가 말하는 진정한 사랑과 소유

서론 폴더 정리를 하던 도중에 저번 학기에 작성한 레포트가 있어서, 이대로 없어지기보단 인터넷 어딘가에 떠도는게 아무래도 좋지 않을까 싶어 남겨봅니다. 레포트의 일부를 가져왔습니다. Maria Rilke 처음 듣자마자 꽤나 익숙한 이름이라고 생각이 들었을지도 모릅니다. “라이너 마리아 릴케” 가 바로 우리가 타자연습을 치면서 스쳐 지나간 그 이름이며 이 글의 주인공입니다. 프라하 출신으로 19세기 말부터 20세기 초까지 활동하며, 여러 시와 명언을 남겨 많은 사람들에게 영향을 남긴 시인입니다. 릴케의 여러 시중 지금 제가 맘에드는 시를 옮겼습니다. 천천히 한번 읽고 나머지 글도 천천히 읽어주시면 좋을것 같습니다. 바쁘시다면 이 시만 읽으셔도 좋습니다. 본문 릴케가 말하고자 하는 진정한 사랑과 소유(‘보다 인간적인 사랑’)에 대한 제가 이해한 바를 적어보려 합니다. 이를 ‘소유하지 않는 사랑’, ‘대상이 없는 사랑’과 함께 설명하겠습니다. 앞서 작성한 대상이 없는 사랑은 매우 모순적…

October 05, 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
알고리즘
브라우저 렌더링

😎 브라우저란? 브라우저란 동기(Synchronous)적으로 (HTML + CSS), Javascript 언어를 해석하여 내용을 화면에 보여주는 응용 소프트웨어입니다. 브라우저의 주된 기능은 사용자가 원하는 정보를 서버에 요청하고 브라우저에 표시하는것입니다. 여기서 원하는 정보의 종류는 크게 Html , img, pdf 등입니다. 여기서 정보의 종류 특히나 Html을 구분하는 것은 주소라고 하며, 이는 Url(Uniform Resource Locator) 이라고 합니다. 브라우저의 종류에는 크롬, 사파리, 파이어폭스 (오픈소스 기반) , 네이버 웨일 등등 다양한 종류의 브라우저가 존재합니다. 최근 유저들의 브라우저 점유율 입니다. 크롬과 사파리가 대부분을 차지하는것으로 보입니다. 브라우저의 구성요소 브라우저의 여러 구성 요소가 있지만 브라우저 렌더링 과정에 중심이 되는 요소들을 중심으로 작성하겠습니다. 1. User Interface 주소 표시줄 , 이전 앞으로 가기 버튼,…

July 25, 2022
짧은지식
(멋사FE) 프로그래밍 언어 검색 문제 풀기

서론 이번에는 지난 시간에 배운 js를 통한 dom 접근 방법들을 활용해 가며 프로그래머스 “2022 Dev-Matching: 웹 프론트엔드 개발자(상반기) 프로그래밍 언어 검색” 과제를 풀어보도록 하겠습니다. 본 글은 프로그래머스 기술 블로그에 기술된 과제 해설을 따라 가되 제 개인적인 코드 해석을 추가하면서 진행됩니다. 문제 소개 image 프로그래머스 에서 풀어볼 수 있습니다. 코드 작성 기본 셋팅 아주 기초적인 html을 작성합니다. style.css는 문제를 풀때 추가 되어 있으나 여기서는 추가하지 않고 하단의 Link에서 추가하도록 하겠습니다. script 태그는 body 태그의 최하단에 위치하는 것이 좋습니다. 왜냐하면 렌더링 엔진이 Html을 파싱하다가 script 태그를 만나게 된다면 Html 문서의 파싱을 중단하고 js 파일을 로드하게 됩니다. 이 경우 html문서를 파싱하는 과정에 있어서 2가지 문제가 발생하게 됩니다. 첫번째는 js 로드가 끝날때까지 화면에 표…

July 05, 2022
멋사FE
(멋사 FE) useState를 통해서 react에서 Re-Rendering 이해하기

이 문서는 멋쟁이 사자처럼 FE를 위한 교육자료로 작성되었습니다. 👋 state란 우리는 react를 배우기 전 js의 기초 문법을 배우면서 변수를 선언하는 여러 가지 방법에 대해 배웠습니다. var, let, const와 같은 것들이었죠. 우리는 그리고 컴포넌트 내부에 값을 전달하는 방식인 prop을 배웟습니다. 그런데 state는 무엇이고 우리는 왜 배워야 할까요? 그 이유는 state는 setState를 통해서 컴포넌트의 state객체에 대한 업데이트를 실행합니다. 그리고 state의 변화가 감지되면 해당 컴포넌트에 작동하는 부분을 Re-Rendering시키게 됩니다. re-rendering은 간단하게 화면에 뷰를 다시 새롭게 보여준다는 의미입니다. 정확한 표현으로는 조화과정(Reconciliation)이라고 칭합니다. image 위의 사진은 Dom 트리와 Virtual Dom 을 보여줍니다. 여기서 중요한 점은 view를 변형시키는 것이 아닌 render함수로 인해서 새로…

June 14, 2022
멋사FE
MIL (Maromav 에서 나는 무엇을 배웠는가?)

Maromav 란? 마로마브는 디지털 제작을 쉽게 할 수 있게 하여 개인 제작의 혁명으로 삶을 혁신하는 스타트업입니다. 약 10만의 다운로드를 기록했습니다!(퇴사일 기준) 앱은 여기서서 확인할 수 있으며, 회사에 대한 자세한 내용은 여기서 확인하실 수 있습니다. 0. 입사하기 전에는… 시간이 너무 빨리가서, 이런 날만 가득하길 바랬지만… (가끔왔답니다?) 입사 할 당시 내가 가지고 있던것들 (작지만 소중한…) 3-1까지 전공 지식, (객체 지향 프로그래밍 , 자료구조론 등등) 멋쟁이 사자처럼에서 배운 기초적인 html , css 열심히 하겠다는 마음가짐! 이제부터 내가 알아야 하는것들 React.js (JS) Styled-component Firebase Github Figma 2. onBoarding 업무 지금은 신입 개발자를 위한 onboarding 과제가 있지만 링크 제가 입사할 당시에는 없었기 떄문에 onboarding 대체 과제를 받게 되었습니다. image make.ed…

June 10, 2022
회고
index.js 파일이 읽혀지지 않는경우엔 어떻게 해결해야 할까?

오류 상황… [Failed to load module script: Expected a JavaScript module script but the server responded with a MIME type of “text/html”. Strict MIME type checking is enforced for module scripts per HTML spec.] 프로그래머스 과제테스트 중 하나인 쇼핑몰 SPA를 작업하다가 발생한 오류 입니다. 또한 routing 처리가 필요한 과제였으니 ”/” 위치 뿐아닌 “/product/:productID”등 / 를 추가하자마자 오류가 발생하였습니다. 처음 이 오류를 마주했을때는 “흠, 뭐 별거 아니겠지~” 라고 생각했지만… 생각보다 많은 시간을 사용한 끝에 해결할 수 있었습니다. 해당 문제의 대부분의 해설은 보통 리엑트나 다른 프레임워크에서 어느정도 경로에 대한 자비로운 처리를 통해서 신경 쓰지 않았던 부분에 대한 해설이었습니다. ex) 다…

May 30, 2022
짧은지식
🔎 패턴 매칭 장치 (비결정적)

패턴 매칭 텍스트 스트링에서 원하는 문자 패턴을 찾아 내는 것 패턴 기술 접합(concatenation) 패턴에서 인접해 있는 두 문자가 텍스트에서 나타나면 매치 논리합(or) 두개의 문자 중 하나가 텍스트에 나타나면 매치 폐포(closure) 특정한 문자가 0개 이상 나타나면 매치합니다. 패턴매칭 방법들중 비결정적 알고리즘(Non-deterministic algorithms)을 사용한 방법을 적어보겠습니다. 비결정적 알고리즘이란 알고리즘 분류 방법들 중 결정적 혹은 비결정적 (Deterministic or non-deterministic)에 따라서 분류 하는 방법을 의미합니다. 패턴 매칭 장치 - 결정적 장치 결정적 알고리즘(Deterministic algorithms) 각각의 상태가 다음 입력 문자로 인해서 완전하게 결정되는 것을 의미합니다. 즉, 계산의 각단계에서 단 한가지의 가능성만을 고려할 수 있는 알고리즘을 의미합니다. 결정적 알고리즘에 해당하는 문제들은 동일한 입력에 …

May 29, 2022
짧은지식
(멋사 FE) 4주차 과제 해설

이 문서는 멋쟁이 사자처럼 FE를 위한 교육자료로 작성되었습니다. 멋쟁이 사자처럼 10기 FE 4주차 과제 🦁 반갑습니다 여러분!!☺️ 벌써 react의 정말 재밌는! 필수적인 요소인 hooks를 다뤄보는 시간입니다! 실습 진행방법 기존의 실습들과 동일하게 진행됩니다 이 레포를 fork 한다! fork하여 이동한 자신의 레포에서 깃크라켄을 통해 클론을 받습니다. 클론을 받은 파일을 vs 코드에서 엽니다! vs 코드에서 터미널을 열어서 npm i 후 npm run start 를 입력하면 코드가 실행됩니다! 이번 실습도 2주차와 마찬가지로 3차에 걸쳐서 진행됩니다! 마지막까지 열심히 진행해보시죠 ㅎㅎ 실습 1번문제 InputSample 컴포넌트는 name과 nickname을 입력받아서 render시키는 컴포넌트 입니다. 해당 기능을 수행하기 위해 주석이 있는 부분을 채워 기능을 완성시켜 봅시다 image image 주석을 채워서 name과 nickname 을 입력받아 봅시다! 해당하는 …

May 29, 2022
멋사FE
📖 유배지에서의 다산(茶山)의 시

다산(茶山) 정약용(丁若鏞, 1762~1836) 다산 정약용은 유형원(柳馨遠) · 이익(李瀷)의 학문과 사상을 계승하여 조선후기 경세치용 (經世致用)을 주장하면서 토지개혁과 농민생활의 안정을 꾀한 실용적인 학자였습니다. 다산은 두번의 유배를 떠났는데, 첫 번째 유배는 1789년 가톨릭 교인이라는 공서파의 탄핵을 받아서 海美(해미)에 10일간 유배 갔습니다. 이때 남긴 한시는 없습니다. 두 번째 유배 는 1800년 正祖(정조) 死後(사후), 노론 벽파에 의해 이루어졌습니다. 노론 벽파는 1801년 2월 천주교도들이 청나라 주문모 신부를 끌어드려 역 모를 꾀했다는 죄명을 내세워 신사사옥을 일으켰습니다. 이 때 매형 이승훈, 둘째형 정약전, 그리 고 셋째 형 정약종 등과 체포되어 2월 27일 경상북도 장기(영일만)로 유배되었습니다. 10월에는 큰 형님 정약현의 큰 사위 곧 다산의 조카사위인 황사영 백서사건으로 인해 서울로 압송된 후 11월에 전라남도 강진으로 이배되었습니다. 그로부터 1…

May 24, 2022
짧은지식
📷 Clustering and Segmentation

Detection and Segmentation Detection은 영상 내부에서 찾고자 하는 요소를 찾을 때 사용하며, Segmentation은 해당 영역을 구분해내는 역할을 수행합니다. Detection 물체의 위치를 찾습니다. (localization) Sematic Segmentation 화소나 색등 비슷한 요소를 모아서 영역화를 진행합니다. Instance Segmentation 카테고리별로 서로 다른 객체를 찾습니다. 앞선 내용에서 설명하진 않았지만 중요한 내용인 Classification(분류)가 있습니다. 해당 영상에서 대표하는 값을 찾아서 어떤 영상인지 분류합니다. Detection 과 Segmentation 모두 이를 위한 과정입니다. Semantic segmentation vs Instance segmentation 반대로 Instance segmentation은 각 픽셀별로 어떤 카테고리에 속하는지 계산하는 것이 아닌 각 픽셀별로 object가 있는…

May 24, 2022
짧은지식
(멋사 FE) 3주차 과제 해설

이 문서는 멋쟁이 사자처럼 FE를 위한 교육자료로 작성되었습니다. 멋쟁이 사자처럼 10기 FE 3주차 과제 🦁 반갑습니다 여러분!! 지난 2주차 세션 때 React.js에 대해서 재밌게 열심히 실습을 잘 진행하셨나요? 다들 정말 잘하시던데… 처음 배우시는건지 살짝 의문이 드는데 괜찮으시겠어요..? 실습 진행방법 3주차는 과제 중심으로 세션이 진행됩니다! Component를 만들어서 샤샤샥 주어진 홈페이지를 구현하고, PR을 올리고 웹페이지를 배포하세요😀 이 레포를 fork 한다! fork하여 이동한 자신의 레포에서 깃크라켄을 통해 클론을 받습니다. 클론을 받은 파일을 vs 코드에서 엽니다! vs 코드에서 터미널을 열어서 npm run start 를 입력하면 코드가 실행됩니다! 3주차 MISSION : Bootstrap Album 페이지 클론코딩 해오기 https://getbootstrap.com/docs/4.3/examples/album/ 클론코딩(Clone-Coding)이란? :…

May 21, 2022
멋사FE
(멋사 FE) 2주차 과제 해설

이 문서는 멋쟁이 사자처럼 FE를 위한 교육자료로 작성되었습니다. 멋쟁이 사자처럼 10기 FE 2주차 과제 🦁 반갑습니다 여러분!!☺️ 2주차부터 약 4주간 함께 진행할 10기 운영진 이성인입니다 ☺️ react는 크게 어렵지 않습니다! 다같이 열심히 하시죠 ㅎㅎ 실습 진행방법 기존의 실습들과 동일하게 진행됩니다 이 레포를 fork 한다! fork하여 이동한 자신의 레포에서 깃크라켄을 통해 클론을 받습니다. 클론을 받은 파일을 vs 코드에서 엽니다! vs 코드에서 터미널을 열어서 npm run start 를 입력하면 코드가 실행됩니다! 이번 실습은 3차에 걸쳐서 진행됩니다! 마지막까지 열심히 진행해보시죠 ㅎㅎ 실습 1번문제 여러분은 프론트 엔드 작업을 진행하시면서 글자에 효과를 어떻게 주셨나요? 매번 id, class를 통해서 받지 않으셨나요? Text 컴포넌트를 수정하며 다양한 순간에 재사용성이 뛰어난 코드를 만들어봅시다! 제한조건 text-weight , text-size 를 pr…

May 17, 2022
멋사FE
(멋사 FE) TodoList 구현

서론 지금 까지 배웠던 HTML, CSS, JS기초 문법들을 통해서 간단한 기능 구현을 해보겠습니다. 복습 - js 를 통한 dom 접근 간단한 todoList 를 만들어보면서 js를 통해 dom에 접근해 보겠습니다. 평범하게 시작할 수 있는 html 파일에 data 배열 형태로 text를 넣어주었습니다. 그 후 document.querySelector 를 통해 내부의 innerHtml에 접근 하여 그 값을 조작합니다. (querySelector 는 선택한 선택자를 포함한 태그 뭉치들 중에서 가장 ‘첫번째’ 요소를 선택합니다. ([mdn]https://developer.mozilla.org/ko/docs/Web/API/Document/querySelector)) (+) 탐색은 깊이 우선 전위순회를 통해서 찾게 되며 문서의 첫번째 요소부터 시작해 자식노드를 모두 검사합니다. ) data라는 배열에 map 함수를 사용하여 내부의 innerHtml을 변경합니다. 변경될 값을 예상해 보자…

May 15, 2022
멋사FE
(멋사 FE) 1주차 과제 해설

이 문서는 멋쟁이 사자처럼 FE를 위한 교육자료로 작성되었습니다. 실습 목표 js를 통해서 프로그래밍에 언어에 대해서 학습한다. js의 입출력 , 조건문, 반복문, 배열 에 대해 학습합니다. 실습 문제 입출력 Hello World : https://www.acmicpc.net/problem/2557 사칙연산 : https://www.acmicpc.net/problem/10869 조건문 시험 성적 : https://www.acmicpc.net/problem/9498 윤년 : https://www.acmicpc.net/problem/2753 반복문 N 출력 https://www.acmicpc.net/problem/2741 별찍기 -1 https://www.acmicpc.net/problem/2438 배열 최소, 최대 https://www.acmicpc.net/problem/10818 나머지 https://www.acmicpc.net/problem/3052 제출 방법 사전과제의 제출 방…

May 10, 2022
멋사FE
(멋사 FE) 간단하게 시작하는 react!

npx로 시작하는 react! 직접 react를 기반으로 시작해 보겠습니다!! 사전 준비가 몇가지 필요합니다! vs code 상에서 터미널을 통해서 해당 명령어를 입력해 주어야 합니다! (만약 깃크라켄을 통해서 프로젝트를 시작한 경우 프로젝트 명이 결정되어 있고 폴더가 생성되어 있는 경우가 있습니다. 이경우 npx create-react-app . 이라는 명령어를 대신하여 사용합니다. 이럴땐 해당 폴더의 위치에서 create-react-app이 실행됩니다.) 아래와 같이 입력하면 됩니다. 현재 폴더의 위치 : 바탕화면/이성인/) 여기서 start-react 라는 이름으로 폴더가 현재 위치에 생성되게 되며, 해당 위치로 꼭 이동해 주어야 합니다. 현재 폴더의 위치 : 바탕화면/이성인/start-react) 현재 위치를 확인하는 명령어 : pwd (만약 현재 위치에서 이동하고 싶다면 cd 명령어를 통해 이동합니다.) 현재 위치가 생성한 프로젝트명과 동일한 경우 위와같은 명령어를 입력…

May 08, 2022
멋사FE
만나서 반가워요!

😎 자기소개 사람은 채울수록 더 진중하고 무거운 사람이 된다고들 합니다. 저는 그럼에도 제가 가진걸 나누고 비우기에 관심이 있습니다. 나의 능력과 배움이 부족할 지라도 누군가에게 가치가 있다면 아낌없이 나누고 싶습니다. 지식을 나누고 함께 성장함에 즐거움을 느끼며 누군가에게 도움이 되는것에 큰 기쁨을 느낍니다. 이 블로그 또한 저를 비워내는 과정들 중 하나리라 생각합니다. 현재 상황 인하대학교 정보통신공학과 3학년 FE에 관심을 가지게 된지 약 1년(2021.7 ~ 현재) 멋쟁이 사자처럼 9기(웹 서비스에 흥미를 가짐) 멋쟁이 사자처럼 10기 운영진 (FE) css실력 : 디자인이 있는 기초적인 view 작업은 가능 (다만 animation , 가상선택자 등은 미숙) js실력 : react를 통해서 js를 익혔기에 기초가 많이 부족 react : styled-component, props, useState, useEffect등 어렵지 않은 개념 정도만 알고 있음 git : 다수의 …

May 08, 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
알고리즘