본문 바로가기

알고리즘['파이썬','JavaScript']26

프로그래머스 코딩테스트 KAKAO (JavaScript) 카카오 코딩테스트 문제를 풀이하며, 주로 고민했던 내용들 입니다. 주로 아쉬웠던 부분을 정리했습니다.이진트리데이터 테이블 생성엣지케이스(MECE)선언적 코드 ↔ 절차적 코드(count변수, index변수, start변수, end변수 .... 예측불가. 과연 맞나?)메모이제이션 배열 개수MECE정규표현식효율성특이한 케이스시간복잡도와 중첩 반복문나쁜 코드 작성 습관(미리 일부 케이스를 셋팅해놓기, answer에 해당하는지를 먼저 if문으로 작성해서 인덴트 증가, 많은 조건문)제너레이터 사용으로 early return함수화 하는 이유: 모듈화 및 테스트 정보를 분리해서 생각하기(서로 어떤 시점의 데이터가 필요한지. 뭔가를 합쳐서 생각하고 있을 수도)반례 찾기 연습 선언적으로 작성하는 방법 고찰. . .  JS.. 2024. 4. 25.
[해커톤] 구름톤 팀 챌린지 나는 몇 번 등장할까? https://blog.goorm.io/9oormthon_teamchallenge/ 구름톤 팀 챌린지, 알고리즘에 진심인 사람들이 모였어요 9월 23일 진행됐던 구름톤 팀 챌린지에는 4주 동안 하루도 빠짐 없이 알고리즘 문제를 푼 48명이 참가했습니다. 구름LEVEL에서 쌓은 실력을 바탕으로 구름스퀘어에 모여 팀 과제를 수행했는데요. blog.goorm.io https://www.youtube.com/watch?v=jPqopNkljvc 2023. 9. 23.
[코드트리 챌린지] 1차 1차를 보충 출석 하려는 조건이, 실력 진단을 한번 더 봐야 하는 것인가..? 오늘 시험봤는데 그러면 시험을 또 봐야 하는 건가?... 이건 아닌 것 같아서 제공해주신 문제를 푸는 것으로 글을 작성하려고 한다. 다음 이미지는 오늘 본 실력진단 결과이다. https://www.codetree.ai/missions/8/problems/corresponding-numbers-and-characters?&utm_source=clipboard&utm_medium=text 이번에 풀었던 문제는 HashMap을 사용해야겠다는 생각이 바로 들었던 유형이어서 금방 풀어낼 수 있었다. 새로 배운 내용은, [ input() for _ in range(n)] 으로 축약해서 사용할 수 있다는 점 이었다. 내 경우에는 매번 fo.. 2023. 9. 18.
[코드트리 챌린지] 2차 2023/09/18 (월) 마지막 문제를 풀지 못했는데.. 마지막 문제는 3가지 방법으로 풀었던 것 같다. 첫번째는 백트래킹(모든 경우의 수에 대한 조합을 계산해야 했어서) 두번째는 itertools의 combinations 세번째는 이중 반복문 사용.. 이번에도 역시나 시간복잡도를 생각하지 않고 풀었던게 문제였는데 세가지 방법 모두 실패했었다. 제안해주신 문제와 해설을 봤는데, 이런 문제 유형도 시간을 줄이기 위한 방법을 HashMap으로 사용할 수 있는지 새로 배울 수 있었다. N^2의 경우에 시간초과가 발생한다면, 한 번의 반복문 안에서 해결해야 한다. 반복문 한 번.. 여기서 또 잠깐 멈칫했던 것은, 어떤 것을 기준으로 쌍의 갯수를 더해줄지 고민했다. (1) 현재 인덱스를 기준으로 이미 지나온 값.. 2023. 9. 18.
백준의 PyPy3와 Python3 종정 파이썬으로는 제출에서 시간 초과가 발생하는데 PyPy로는 잘 제출되는 경우가 있다. 시간 초과 문제를 해결하기 위해 파이썬으로 단련해야 되는건가? 싶어서 찾아본 글인데 보고 깜짝 놀랐다... 일목요연하게 잘 설명해주셔서 글이 부드럽게 읽힌다. https://djm03178.tistory.com/16 PyPy3로 제출하면 통과됩니다. BOJ에서는 Python 3를 위한 제출 언어를 두 가지 제공하고 있습니다. 기본 CPython 인터프리터를 사용하는 Python 3와, 일반적으로 훨씬 빠른 속도를 자랑하는 인터프리터인 PyPy3입니다. 이 글에서 하고 djm03178.tistory.com PyPy3로 제출하면 통과됩니다. 2023. 9. 14.
구름톤 챌린지 4주 day20 학습 일기 마지막 문제는, 새로 삽입하는 문자를 target으로하고, bfs 탐색을 했다. 연결된 target의 개수가 K 이상인 경우 해당 칸들을 '.'으로 대입해야 했는데, bfs 탐색할 때, 조건에 맞는 행과 열을 배열에 추가한 뒤 target개수와 같이 return 해주었다. 주의해야할 부분은, 행과 열을 받을 때 인덱스로 생각해서 전환해주어야 한다는 점. 예를 들어, 1행1열은 사실상 2차원 배열에서(0,0)이기 때문에, inputRow-1, inputCol-1을 해주어야 한다. 오늘의 학습일기 끝! 콘! 우리가 드디어 20일차까지 도달했어ㅠㅠ! 무지! 축하해~!! 2023. 9. 8.
구름톤 챌린지 4주 day19 학습 일기 bfs를 사용해서 풀이를 해도 같은 결과가 나오겠지만 이번 문제는 힙을 사용해서 풀이했다. 다만 예외처리를 해야 하는 부분을 놓치면 안되고, 접근이 불가능한 도시도 고려해야 한다. 방문처리도 해주어야 무한루프를 돌지 않는다. 오늘의 학습 일기 끝 2023. 9. 7.
구름톤 챌린지 4주 day18 학습 일기 dp로 풀지 않았고 시뮬레이션만 활용했는데, 풀이를 꼭 봐야겠다. 자료구조는 딕셔너리를 사용해서 L,R,U,D를 key로, (row, col) 조절 값을 value로 넣어 초기화를 했다. 예를들어, {L:(0,-1)} L의 경우 좌측으로 이동하기 때문에 열을 -1 감소해야 하는 것을 의미한다. 결론적으로는 해당 칸의 중첩점은 가로선 개수와 세로선 개수의 곱으로 표현할 수 있다. 디버깅을 했던 부분은.. 배열을 선언할 때 [[[0,0]]*N for _ in range(N)] 이렇게 한 경우 한 행의 값을 변경할 때마다 통째로 변한다. 얕은 복사로 인해 동일한 주소값을 참조하게 되어 문제가 발생하게 되는 것이 원인이었다.a=[[[0,0]]*(N) for _ in range(N)] print(a) #[[[0,.. 2023. 9. 6.
구름톤 챌린지 4주 day17 학습 일기 런타임 에러 꽤 많은 테스트 케이스에서 런타임 에러가 발생했다. 오류가 발생할 곳이 없다고 생각했는데, 디버깅을 하면서 visit을 체크하는 부분에서 오류가 발생했다. 100000 by 100000 배열은 너무나 컸던 탓일 것이라 생각되어 해당 배열은 메모리를 더 적게 사용하기 위한 방법을 고민했다. 시간복잡도와 공간복잡도.. 런타임 에러가 배열 인덱스 접근할 때가 아니라, 이럴때도 발생한다는 것을 새롭게 배울 수 있었다. 오늘의 학습일기 끝 2023. 9. 5.