전체 글
대회 일정
1. ucpc https://ucpc.me/ - 참가 신청 : ~2022. 06. 23.(목)까지 - 예선 : 2022.07.02. (토) 14시~17시 / 온라인 - 본선 : 2022.07.23. (토) 11시~16시 / 오프라인, 스페이스쉐어 삼성 COEX센터(강남) 2. cps festival https://www.cpsfestival.org/ - 접수 : 2022. 6. 13.(월)-7. 18(월) / 온라인 - 예선 : 2022. 7. 25.(월) - 8. 1(월) / 온라인, 시간 내에만 하면 됨 - 본선 : 2022. 8. 27(토) 14시 / 호텔인터불고대구 컨벤션홀(대구 수성구) - 시상식 : 2022. 11. 16.(수) 이거 예선 온라인 방식이 팀장이 문제를 제출하는 방식이라 하루..
[Socket.io] 채팅 기능에 관한 고찰
실시간 채팅 구현 조금 생각을 해 보았다. 1) 온라인 -> socketio로 연결해서 실시간 통신 1.5) 백그라운드 -> FCM으로 push 알람만 보냄. 2) 오프라인 -> 아무것도 하지 않음. 다만 온라인으로 상태 변경 시, 서버에서 읽지 않은 메시지 목록을 전부 받아오면 될 듯. + 읽은 기능 구현은 users - room join table에 해당 유저가 접속한 시간을 적고, 그 시간이 갱신되면 그것보다 작은 것들의 읽은 시간을 갱신하면 될 듯. 저번에 올린 예제를 만든 파일의 경우, 인터넷 연결이 끊기면 메시지를 받을 수 없다는 문제점이 존재했다. 그래서 서버에 보낸 메시지를 저장하는 schema를 추가하려고 합니다. 형태는 ((보낸 시간, 방 번호), 보낸 사람, 메시지 내용) 정도로 ..
플젝 아이디어
deep learning / object detection 기반 - 농구 코트 및 사람 인식, 평면도로 바꾸어서 전술 분석 - 미스매치 여부, 전술별로 승률, 득점률 등을 따져서 빅데이터 만들면 재밌지 싶다. - 농구 슛/드리블 폼 분석 - pose 분석으로 가져오기 계획 세워주는 프로그램. - 책/일정 입력하면 계획 세워주는 프로그램 택시 잡아주는 프로그램. - 현재 위치 기준, 도착지까지 최단시간으로 갈 수 있는 위치로 잡아주는 프로그램. - A에서 B까지 택시타고 갈 때 A에서 택시를 호출하면 택시가 A까지 오는 위치, A에서 택시를 타고 가는 시간이 있다. - 이 시간을 줄이기 위해서 A에서 B 사이에 있는 A'이라는 위치까지 걸어가고, 택시는 A'까지 오게 해서 시간을 최소화 해주는 어플리케..
22.06.21. 프로그래머스 Lv3까지 올솔 + 이후의 목표
프로그래머스 lv1, lv2, lv3까지 전부 풀었다! 의미는 없지만 순위도 33위까지 들어왔다. 즉슨 lv3까지 모두 푼 사람이 적어도 32명이라는 거다... 이거에 안주하지 말고 더 발전하자. 또, 작성했던 '나중에 다시 풀기'가 87문제다. 이 중에서 후반부에는 내가 못 푼 것들도 많다. 나중에 다시 풀어보는 시간을 갖자! 프로그래머스를 풀면서 제일 많이 늘었다고 생각하는 건 '구현력'이다. 카카오의 기출문제가 대부분 간단한 알고리즘에 비해 + 복잡한 구현인데, 예전이었으면 함수 하나에 다 때려박았는데 지금은 함수도 잘 분할하고(해당 함수의 로직이 잘 돌아가는지 검증하기도 쉽다) 전역변수도 적극적으로 사용하고(특히 DFS나 backtrack에서) index 실수가 아니면 구현하고자 하는 걸 구현..
22.05.02. 와,, 과거의 나... 대체 뭐니..?
오늘 갑자기 옛날 포스팅들을 돌려보면서 과거 생각을 조금 했는데. 2020년 겨울에 무은재 1층에서 알고리즘 과제 10시부터 5시까지 조지고 데이터베이스 과제 조지고 시험기간에 강의 4번씩 돌려보면서 폰블서 하던 기록이 정말 새록새록하다. 그리고 알고리즘 시험을 마지막으로 시험 끝난 날 이터널 리턴 얼리억세스 시작했던 것도 기억나고, 그거를 시작으로 넵튠 주식으로 한 30% 떡상한 것도 너무 새록새록하다. 그러고 겨울 연참하다가 아... 인턴!인턴! 하면서 매일매일 인턴 뒤져보고. 그와중에 레식이랑 이리 조지고. 그랬던 내가 어쩌다 소마를 하고, 어쩌다 SW개발병까지 왔네. 소마 했을 때 kubernetes, jenkins, docker, gcp, git, spring(security, jwt token..
2022.03.22. 군대에서 PS공부 시작.
Algorithm 병 생활 중 전역 이후 알고리즘 공부 아래 네 군데서 공부할 예정 - https://www.acmicpc.net/ - https://codeforces.com/ - https://programmers.co.kr/ - https://leetcode.com/ 정보 블로그들 subinium.github.io/PS-Study-Types-and-Complements/?msclkid=d60b6cd9a9be11ecb723c667121b88da blog.naver.com/kks227 https://github.com/tony9402/baekjoon 전역 전까지 목표 최소 어디든 상위 10%까지는 찍어보기 국내 대기업 코딩테스트 안전빵으로 통과할 수 있을 정도로 역량 쌓기 대회 수상까지 노려보기 아래 ..
[개발서적] Clean Code 정리
1. 의미 있는 이름을 작성하자 누가 보든 알아보기 쉽게 변수명과 함수명을 작성하자 읽기 쉽고, 직관적인 단어를 사용하자(줄임말 말고) 코드 길이가 조금 길어지더라도 상수를 변수로 사용하자(검색의 편의를 위해) 클래스 이름 : 명사/명사구 메소드 이름 : 동사/동사구 한 개념에 한 단어(동의어를 사용하지 말 것) 2. 함수는 작게 작성하자 최대한 짧게 작성하자. indent는 1-2개 정도로 두자. 함수 이름을 서술어로 잘 설정해서 코드만 읽어도 이해되게 해 보자. 함수는 1가지 역할만 하자. (추상화 수준을 1개로 만들자는 것) 함수 인수는 최대한 적게 두자. 3. 주석은 최대한 없애자 주석이 필요없을 정도로 깔끔한 코드를 짜면 된다. 필요하다면, 의도와 의미를 명확하게 설명하자. 필요한 주석은, ..
22.06.23. 풀었던 문제들
acmicpc String 파트 풀었음. 조만간이다..! 다따라잡자! 11654 아스키 코드 11720 숫자의 합 10809 알파벳 찾기 2675 Repeating Characters 1157 단어 공부 1152 단어의 개수 2908 FILIP 5622 BAKA 2941 LJESNJAK 1316 그룹 단어 체커
21.07.11. 이번 주 공부계획
팀원들과 프로젝트 이야기 - 프로토타입 다듬기(추가기능 등) - 마일스톤 작성하기(상세기능 및 전체 계획 등) - API 명세 - DB Schema 작성 Jenkins 공부 (~15일) - Gitlab hooker와 jenkins 연동해서 push 시 build하는 것은 진행했음. - unit test - docker image 등록하는 것까지 jenkins로 해 보자. MSA 공부 (~11일) - Java 기반 마이크로 서비스 이해와 아키텍처 구축하기 책 완독 및 정리하기 Spring 공부 - 강의 듣기
21.06.28. 짧은 공부계획
06/28, 06/29 - Spring Boot MVC model 게시판 예제 구현 https://aridom.tistory.com/61 victorydntmd.tistory.com https://kyuhyuk.kr/article/spring-boot/2020/07/19/Spring-Boot-JPA-MySQL-Board-Write-Post https://congsong.tistory.com/15?category=749196 congsong.tistory.com 그러면 다음주까지 계획은 대충... 일요일 월요일 화요일 수요일 목요일 금요일 토요일 28 29 30 1 2 3 springboot mvc 게시판 구현 오전 정처기 실기계획 springboot mvc 로드맵 오후 springboot mv..
22.06.22. 풀었던 문제들
이제 백준! 입출력 10926 - 입출력 문제. 그냥 손풀기로 풀었음 18108 - 마찬가지 25083 - "출력하기 위해서는 앞에 \ 붙여야 하고, \ 출력 위해서는 \\로 해야 함. 조건문 2525 2480
22.06.21. 풀었던 문제들
1. GPS bellman-ford로 푸는 문젠가? 싶어서 생각해 봤는데 '잘못된 길'을 찾는 시점부터 뭔가를 해결하려 하면 끝이 없을 것 같아서 포기 DP라는 걸 알게 되어서 dp[i][j]를 time i to j까지 최소수정 횟수를 두려 했는데, 이렇게 해서 dp[0][0]부터 시작하려 했다. 그런데 음... 아니었다. {0, 0}, {1, 1}, ... {n, n}을 고치고 {0, 1}, {1, 2}, ... 를 고치는 방식은 모든 위치 정보를 넣어야 하기도 했다. 시간 초과가 날 알고리즘이기도 했고. 그래서 다른 방식을 고민하다 ㅏ아... 모르겠다 싶어서 구글링 dp[t][l] = 시간 t의 위치가 l일 때, 시간 0부터 t까지경로를 수정해야 하는 최소 횟수로 생각하면, dp[t][l] = min..
22.06.19. 풀었던 문제들
1. 몸짱 트레이너 라이언 푸는 중... 겹치는 사람 수는 누적합으로 쉽게 구할 수 있다. 처음에는 backtracking으로 풀려 했는데 최악의 시간인 100C50의 경우 1억을 훨씬 초과한다. 그래서 case by case를 세웠는데, 겹치는 사람 수가 n*n/2 + n%2(chessboard처럼 배열)보다 크다면 무조건 거리는 1이다. 잘 모르겠어서 구글링을 했고, 모든 경우의 탐색보다는 '거리가 d일 때 k개를 배열에 둘 수 있는가?'를 탐색하는 것으로 바꾸어 생각하면 풀린다고 한다. 생각해 보면, 새로 locker는 직전에 놓은 locker와 거리가 d인 위치에 놓게 하고(O(1)), 지금까지 놓은 locker들을 순회하면서 거리가 d 이상인지 검사해야 하고locker(O(50)) 최대 거리는 ..
22.06.18. 풀었던 문제들
1. 캠핑 처음에는 O(n^2)으로 풀어야 하는 문젠데, 어떻게 O(1)또는 O(logn)만에 좌표가 사각형 안에 있는 걸 판별하지 ? 라고 생각했다. 이렇게 판별하려면 좌표평면 안에 모든 좌표에 대한 정보를 넣어야 하는데 좌표의 범위가 int이므로 이 또한 불가능했다. 잘 모르겠어서 구글링 해 보니 좌표압축 후 누적합으로 푸는 문제였다. 좌표압축은 처음 들어보는 알고리즘이다! 신박했다. https://puzzle-puzzle.tistory.com/entry/2017-%EC%B9%B4%EC%B9%B4%EC%98%A4-%EC%BD%94%EB%93%9C-%EC%98%88%EC%84%A0-%EC%BA%A0%ED%95%91 // 캠핑 #include #include #include #include #includ..
22.06.17. 풀었던 문제들
1. 백준 1717 집합의 표현 union-find 기초 구현 문제 2. 사라지는 발판 첫 접근은 - A, B 둘 다 이동할 수 있는 경로로 이동하되 전체 게임의 수가 제일 긴 것을 리턴하게 했는데... 이러면 A가 이길 수 있는 상황에서도 지는 경우로 가는 수가 생긴다. 즉 잘못된 풀이다. 잘 모르겠어서 구글링 한 결과 접근은 아래와 같다. 현재 플레이어가 어떤 수를 택하고, 다음 플레이어가 어떤 수를 택했을 때 다음 플레이어가 승리 가능한 수가 있을 때 : 승리할 수 있는 수를 선택할 것이다. 다음 플레이어가 무조건 패배할 때 : 최대한 게임을 길게 끌고 갈 것이다. 종료 조건은 더 이상 움직이지 못할 때, 승리자는 현 플레이어가 아닌 플레이어이다. 에서 시작한다. 위 접근으로, '현 ..
22.06.16. 풀었던 문제들
1. 카드 짝 맞추기 너무 귀찮았다. 크게 3단계로 나눌 수 있는데 현재 위치부터 1번 입력으로 이동할 수 있는 좌표 list 구하기 구현으로 풀 수 있음 현재 위치부터 모든 점까지 거리 구하기 바로 위의 함수와 BFS를 이용해 풀 수 있음 backtrack으로 카드를 뒤집는 모든 종류를 구하기 한 카드를 뒤집으면 그 카드의 pair도 바로 뒤집는 게 제일 효율적이다. 따라서 한 카드를 뒤집고자 하면 '현재 위치 ~ 그 카드의 위치' + '그 카드의 위치 + 그 카드의 pair의 위치' + 2만큼의 count가 더해진다. 이걸 이용해 backtrack하면 된다. // 카드 짝 맞추기 #include #include #include #include #include #include #include using..
22.06.15. 풀었던 문제들
1. 양과 늑대 처음에는 현재 미탐색인 양으로부터 visited까지 올라오면서 추가 가능한 양들만 계속 탐색해 나갈려고 했는데 너무 복잡해졌다. 조금 검색해서 DFS란 걸 알았고 이걸 아니까 쉽게 풀리는 문제였다. 먼저 candidates vector는 현재까지 visited인 것들의 child vector이다. 즉, 탐색 가능한 후보군 vector이다. can_go vector는 정말 갈 수 있는 node들만 넣은 것이고, candidates[i]가 true이고 해당 node를 추가함으로써 늑대 숫자가 양 숫자보다 크거나 같아지면 탐색 불가능이므로 그렇지 않을 때만 node를 넣는다. 이후에는 can_go 내의 node들로 DFS를 한다. DFS 할 때에는 node를 사용했으므로 candidate[no..
22.06.14. 풀었던 문제들
1. 블록 이동하기 어제 시간 없어서 못 풀었던 문제 풀었다. 전체적으로 구현이 귀찮은 문제였다. 신경 쓸 것도 많았고. 로직 자체는 간단한 BFS이지만 1) visited 배열 - 로봇의 위치는 점 2개로 이루어지기 때문에 점 2개를 이용해서 중복 검사를 할 수 있게 해야 했기 때문에 ppiipii를 항상 정렬한 상태로 유지했다. 2) 이동 가 / 불 여부 - 현재 위치 (r, c), (r', c') 기준으로 어디로 이동할 수 있는가?를 조금 생각해 주어야 했다. a) 직선 이동하는 경우 - 위 / 아 / 왼 / 오 - 모두 다 범위 안이고 0이어야 이동할 수 있음. 이건 쉽지만 b) 회전 이동하는 경우 - (r, c)을 축으로 90도 - 이게 귀찮았다. 물론 이동 후 위치도 0이어야 이동 가능하겠..
22.06.12. 풀었던 문제들
오늘은 정기외출이었던 관계로 연등 때 1문제만 풀려 했는데... https://army.goorm.io/ https://military22.elice.io/ 두 곳의 사전테스트로 인해서 오늘 공부는 패스. 사전테스트는 패스했다. 사전 테스트는 python을 이용한 뭔가였는데 만점 받았다! 이제 프로그래머스 슬슬 끝나가니까 AWS EC2(무료 컨테이너)를 이용해서 vs code 서버나 하나 만들어 보자. 사지방 로컬은 매번 초기화되니까 하나 있어야 하지 싶다.