본문 바로가기

전체 글

(215)
[React] Infinite Scroll 진행하고 있는 프로젝트에 infinite scroll (무한 스크롤)을 구현하고 싶어서 공부하게 되었습니다. 우선 최종적으로 만들고 싶은 상황은 다음과 같습니다. 서버에서 데이터를 가져온다. (n개씩) 스크롤이 하단에 닿으면 로딩을 보여주면서, 다음 데이터를 fetching 한다. 더이상 불러올 데이터가 없다면, 로딩하지 않는다. Infinite Scroll를 구현하는 방법에는 크게 세가지가 존재합니다. onScroll event Intersection Observer API useRef onScroll event onScroll event를 이용해서 사용자가 scroll을 한다면 이벤트를 발생시키고, scroll위치가 페이지의 끝에 닿았는지 판단합니다. 끝에 도달했다면 새로운 컨텐츠를 로딩하기 위한 요..
[종만북] 3부 좋은 코드를 짜기 위한 원칙. 간결한 코드를 작성하기: 프로그래밍 대회에서 코드를 작성할 때 첫번째 원칙은 간결한 코드를 작성하라는 것입니다. 코드가 짧으면 짧을 수록 단순한 버그가 생길 우려가 줄어들고, 디버깅도 쉬워집니다. 이 원칙은 어디에든 적용됩니다. 적극적으로 코드 재사용하기: 당장 차이점이 없더라도 항상 코드를 깔끔하게 작성하고 유지하는데 신경을 쓰다보면 스스로가 그와 같은 코드에 익숙해집니다. 간결한 코드에 익숙한 사람은 다음 번에 비슷한 코드를 짤 때 처음부터 좀더 간결하게 코딩할 수 있게 됩니다. 항상 같은 형태로 프로그램을 작성하기: 같은 코드를 작성하는 더 좋은 방법에 대해 꾸준히 고민할 필요는 있지만, 자주 작성하는 알고리즘이나 코드 등에 대해서는 한 번 검증된 코드를 작성하고 이것..
[2022 KAKAO BLIND RECRUITMENT] 양과 늑대 ⭐️ 양과 늑대 heap을 사용해서 양과 늑대의 우선순위 즉 양은 0이므로 앞에 온다. 를 이용해서 빠르게 제출을 할 수 있었다. 27점이나 맞았네..? import heapq def solution(info, edges): graph = [[] for _ in range(len(info))] for a,b in edges: graph[a].append(b) # graph[b].append(a) visited = [False] * len(info) print(graph) def traversing(start, animal: int , sheep, wolf): visited[start] = True q = [] heapq.heappush(q, (animal,start)) # q.append(start) w..
[2021 카카오 채용연계형 인턴쉽] 표 편집 ⭐️ 표 편집 첫 제출에 8점을 받았습니다. ㅋㅋㅋㅋㅋㅋ 코드에서 문제가 뭐였고 개선할 점을 찾아서 나아가봅시다. def solution(n, k, cmd): # print(n, k ,cmd ) # n 행의수 k. 행의 위치 cmd 명령어 answer = '' cursor = k true_table = [i for i in range(n)] table = [i for i in range(n)] deleted = [] for i in range(len(cmd)): prefix = cmd[i][0] if prefix == 'U': cursor -= int(cmd[i][-1]) if prefix == 'D': cursor += int(cmd[i][-1]) if prefix == 'C': deleted_inde..
[종만북] 개관 ~ 2부 “잘하는 사람과 못하는 사람의 생산성 차이가 스무배" 이라는 말이 진지하게 나올 수 있는 분야가 컴퓨터 전공입니다. (Thinking in Java. 브루스에켈) 이런 현상의 가장 근본적인 이유는 대부분 컴퓨터 과학 교육 과정이 프로그래밍의 기술과 지식을 가르칠 뿐, 그것을 스스로 응용 할 수 있는 능력은 주지 못하기 때문입니다. 지식을 진정 자신의 것으로 만들어 활용할 수 있기 위해서는 학문이 발전하는 과정에서 일어난 발견과 깨달음을 학생 자신이 되짚어갈 수 있어야합니다. 프로그래밍은 문제 해결이다. 프로그래머가 사용하는 언어나 라이브러리, 알고리즘에 대한 지식들이 퍼즐의 조각이라면 문제 해결 능력은 적재 적소에 퍼즐 조각을 배치하고 이들을 연결해서 큰 그림을 만드는 능력이라고 할 수 있습니다. 02...
[2019 카카오 개발자 겨울 인턴쉽] 튜플 ⭐️ 튜플 레벨2 문제입니다. split 을 이용해서 잘 나눠주고 길이로 정렬을 해줍니다. 그 후 set의 difference 함수를 이용해서 차이만큼 결과 리스트에 더해줍니다. def solution(s): answer = set() result = [] srcs = s[2:-2].split('},{') srcs.sort(key=lambda x : len(x)) for src in srcs: temp = set(list(map(int, src.split(',')))) result = result + list(set.difference(temp, answer)) answer=temp return result 다음은 프로그래머스 다른 사람 풀이에서 본 좋은 풀이입니다. def solution(s): # {..
[2022 KAKAO BLIND RECRUITMENT] 신고 결과 받기 ⭐️ 신고 결과 받기 📝 설계 우선 문제를 꼼꼼히 읽어야 겠다는 생각을 했습니다.. 가장 큰 제약 조건은 신고한 사람이 같은 사람을 또 신고했을 때, 신고 횟수는 늘어나지 않는다는 것입니다. 또, 문제에서 매개변수로 준 id_list, report, k라는 조건을 모두 활용하려고 노력했습니다. 제 풀이는 defaultdict을 이용했는데 이때 신고횟수를 세는 딕셔너리 한개와 누가 누구를 신고했는지 기록하는 딕셔너리 한개를 만들었습니다. 그리고, 누가 누구를 신고하고 신고횟수를 카운팅해주었는데, 예를들어 a가 b를 신고했을 때 b가 a의 신고 리스트에 들어있다면 신고 횟수를 늘리지 않았습니다. 그리고 그 두개의 딕셔너리에 대해 2중 for문을 돌면서, 탐색을 진행했습니다. 신고 횟수가 k 이상인 사람에 대..