목록✏️ 2022. TIL/August (19)
Daehyunii's Dev-blog

오늘은 투 포인터 알고리즘에 대해서 공부했다. 기존에 udemy 강의를 통해서 투 포인터를 배웠고 이를 활용하면 어떤 장점들이 있는지는 알고 있었으나 이를 구현하는데 굉장히 많은 어려움을 느꼈었다. 오늘도 역시나 개념자체를 이해하는데 어려움은 없었지만 이를 코드로 구현하는게 굉장히 헷갈렸다. 포인트들을 이동시키기 위해 인수로 받은 값들을 잘 활용하거나 알맞은 위치에서 증가시켜 나가야 함에도 전체적으로 머릿속에 그림이 잘 그려지지는 않았다. 그래서 연필로 하나 하나 대입해가면서 천천히 과정을 이해하려고 노력을 많이 했다. 특히 부분수열을 공부할 때는 강의를 통해 설명을 들으면 이해가 되었다가 다시 혼자 코드를 작성하려고 하면 계속해서 에러가 발생하곤 했다. 아직까지도 정확하게 코드를 구현한다고 자신할 수는..

오늘은 for문을 활용한 완전 탐색에 대한 문제들을 공부했다. 말 그대로 주어진 정보들을 원하는 답을 찾을 찾기위해 전부 탐색하여 비교하는 알고리즘이다. 오늘은 공부를 하면서 기초적인 수학적 지식도 충분히 익히고 있어야 한다는 것을 느낀것 같다. 예를 들면 숫자의 각 자리수를 빼내는 방법, 소수를 구하는 방법 등 알고보면 당연한 것이지만 막상 코드를 구현하려고 했을때는 손이 움직여 지지 않았다. 그리고 또 원하는 해답을 찾기위해 4중 for문까지 구현을 해 본 문제도 존재하는데 반복문을 몇 중으로 돌아야 한다라는걸 바로 찾아내지 못했다. 다만 실제로는 4중 for문을 사용하는 경우는 시간 복잡도 이슈로 사용하는 일이 없을 것이라고 생각하긴 하지만, 우선 알고리즘의 문제를 푸는 과정에서는 나중에 코드를 더..

오늘은 문자열 탐색에 대해서 공부했다. 문자열은 원시값이지만 유사 배열 객체이므로 이터러블이고 for문을 활용해서 문자열의 문자들을 반복할 수 있다. 이러한 개념들을 알고 있었고 단순히 문자열의 문자들을 반복해서 처리하는 것들은 쉽게 느껴졌다. 회문 문자열이나 유효한 팰린드롬 문제의 경우에는 문자열 관련 메서드들과 정규표현식을 활용해서 충분히 비교가 가능했던것 같다. 하지만 이렇게 직관적으로 비교를 해야하는 문제들은 큰 어려움이 없었으나 가장 짧은 문자거리 구하기와 같은 문제에서 문제를 해결하기 위한 방법을 생각해 내는것은 정말 어려웠다. 오늘 처음 접해본 문제이기는 하지만 해결 방법만 알게된다면 굉장히 간단한 문제임에도 그 해결 방법이 떠오르지 않아서 답답함을 많이 느꼈던 하루였다. 2022.08.31..

오늘은 알고리즘 문제풀이 강의에서 1,2차원 탐색 문제와 관련해 공부를 했다. 1차원 탐색의 경우에는 문제에서 요구하는 답을 기준으로 for문을 돌면서 해결하면 되었고, 2차원 탐색의 경우에는 이중 for문을 활용해서 하나의 값과 나머지 값들을 다 비교해서 원하는 답을 찾는 것이다. for문 자체를 구현하는것은 익숙해졌기 때문에 문제가 되지 않았으나, 오히려 문제를 읽고 원하는 답을 얻기위해서 for문을 어떻게 구성해야 하는지가 많이 헷갈렸던것 같다. 특히 격자판 최대합 문제의 경우에는 행과 열, 그리고 대각선을 구할때 행과 열 인덱스를 어떻게 활용해야 할 지 굉장히 헷갈렸다. 가장 좋은 방법은 계속해서 복습해 보는 것이라 생각하고 행과 열을 보고 인덱스 번호를 잘 활용하는 것이 익숙해 질때까지 복습이 ..

오늘은 풀어 보았던 문제들은 대부분 직관적으로 해결 방법이 명확한 문제들이었다. 다만 메서들을 조금씩 알아가야 한다는 생각이 많이 들었다. 기존에 자바스크립트를 공부할때는 필요한 경우 검색이나 책을 통해서 확인하는 정도로 공부를 했었는데 이제는 기본적으로 빈번하게 사용하는 메서드들은 정확하게 기억을 할 필요가 있을것 같다. 오늘 고전한 문제는 가운데 문자 출력하는 문제이다. 간단할 것이라고 생각했는데 의외로 고전을 한 것 같다. 인덱스가 0에서 시작하는 것을 계속해서 잊어버리고 위치를 머리로 계산하면서 찾으려고 하니까 헷갈리기 시작했고, 한번 헷갈리기 시작하니 의외로 시간이 많이 걸린것 같다. 그 외의 문제들은 크게 어려운 점은 없었던 것 같고 술술 잘 풀리는 기분이 들어 오히려 기분이 좋았다. 아직 문..

오늘은 많은 문제들을 풀지는 못했지만, 처음으로 조금 더 깊게 생각을 하게 된 것 같다. 단순하게 자바스크립트의 기본 문법들을 알고 있는것과는 다른 문제였다. 기본 문법들을 토대로 이를 활용해서 문제를 해결하는 코드를 작성해야 하는데 그 문제 해결 방법을 생각하는게 쉽지가 않았다. 10부제의 경우에는 1의 자리의 숫자를 빼내서 활용해야 하는데 1의 자리의 숫자를 빼내는 방법이 떠오르지 않았었고, 일곱 난장이의 경우에는 중복되는 계산이 없게 반복문을 돌리는 방법과 총 합에서 빼기를 활용해서 답을 구한다는 방법도 떠오르지 않았다. 생각보다 더 많이 내가 현재 틀에 박힌 생각을 하고 있다는 느낌을 받았다. 스스로 문제를 풀어보고 강의를 다시 들었을때는 생각보다 너무 간단하게 해결할 수 있는 문제를 너무 복잡하..

오늘 부터 유데미의 알고리즘 기초강의를 끝마치고 인프런 알고리즘 문제풀이 기초강의를 시작하였다. 처음 문제를 보고 접근할 때 굉장히 간단해 보이면서도 코드 구현이 바로 이뤄지지는 못했던것 같다. 문법적으로 어려움은 없었으나, 어떻게 접근해서 문제를 해결해 나가야할 지 생각하는게 생각보다 쉽지는 않았다. 다행히도 아직까지는 문제 자체가 어렵지가 않아서 2-3문제에 접근하다 보니 자연스럽게 쉬운 문제는 코드를 작성해 나갈 수 있게 된 것 같다. 오늘 문제를 접하고 푸는 과정에서 느낀점은 유연한 사고가 정말 필요하다고 느꼈다. 해당 문제를 해결하는 방법은 많은 방법이 존재할 수 있기 때문에 조금 더 유연하게 생각하면서 문제를 해결해 나가는 연습이 필요할 것 같다. 2022.08.28 - [언어 공부 및 정리/..

오늘은 동적 프로그래밍에 대해서 공부했다. 동적 프로그래밍이란 문제 해결 방법 중 하나이다. 모든 문제에 사용할 수는 없지만 특정 조건들이 만족되었을때 동적 프로그래밍을 활용해서 문제를 해결하면 효율을 높일 수 있다. 동적 프로그래밍을 활용하기 위한 문제의 조건은 첫 번째는 중복되는 하위 문제가 있어야 하고, 두 번째 조건은 최적 부분 구조를 가져야 한다는 것이다. 중복되는 하위 문제란 말 그대로 똑같은 처리를 해야하는 반복되는 작은 단위의 문제들이 있어야 한다는 것이고 최적 부분 구조란 하위 문제에서의 답들이 집합이 결국 해결하고자 하는 문제의 해결 방법이 되어야 한다는 것이다. 대표적인 예로 피보나치 수열이다. 피보나치 수열을 일반 함수로 만들어 해결하고자 한다면 fib(5) = fib(4) + fi..