전체 글

개발은 좋은데 뭘로 개발할까
알고리즘 문제/BOJ (Python3, C++)

[백준] 11054 - 가장 긴 바이토닉 부분 수열 (G3)

문제 소개 https://www.acmicpc.net/problem/11054 11054번: 가장 긴 바이토닉 부분 수열 첫째 줄에 수열 A의 크기 N이 주어지고, 둘째 줄에는 수열 A를 이루고 있는 Ai가 주어진다. (1 ≤ N ≤ 1,000, 1 ≤ Ai ≤ 1,000) www.acmicpc.net 가장 긴 증가하는 부분 수열의 응용문제이다. 가장 긴 증가하는 부분 수열의 풀이 과정을 정확하게 이해하고 있다면, 이 문제 역시 어렵지 않게 풀 수 있다. (골드3 난이도길래 특별한 코너케이스가 숨어있는 줄 알았는데, 다행히 그런 건 없었다.) 11053 가장 긴 증가하는 부분 수열 https://www.acmicpc.net/problem/11053 9465 스티커 https://www.acmicpc.ne..

개인 프로젝트/[2021] 코드악보 공유APP

16. 악보 구성 수정, 악보 검색 기능 추가

원래는 악보를 구성할 때, 페이지 별로 구성하는 것을 생각했었다. verse 페이지 작성하고, chorus 페이지 작성하고, bridge 페이지를 각각 만든다음 '전체' 페이지에는 각 페이지에 작성한 코드를 이리저리 조합해서 만들자! 이게 내 처음 아이디어였는데, 생각보다 '전체' 페이지에서 각 페이지의 코드를 합치는게 복잡했다. 단순히 각 페이지의 코드를 읽어서 붙이는 것이라면 상관없겠지만, (사실 이것도 구현하기가 너무 귀찮았다.) 이왕 각 페이지의 코드를 참조하는거, '전체페이지의 코드'와 '각 페이지의 코드' 를 서로 연동해서 전체 페이지에서 수정한 코드가 각 페이지에서도 수정되고, 각 페이지에서 수정한 코드가 전체에서도 수정되도록 하고 싶었다. 이걸 구현하려면, 결국 모든 코드셀에대해 Globa..

알고리즘 문제/BOJ (Python3, C++)

[백준] 14653 - 너의 이름은

https://www.acmicpc.net/problem/14653 14653번: 너의 이름은 첫째 줄에 OAKAK TALK방에 있는 사람 수 N과 총 메시지의 개수 K, 정보를 알고 싶은 메시지의 번호 Q가 주어진다. (1 ≤ N ≤ 26, 1 ≤ K ≤ 10,000, 1 ≤ Q ≤ K) 둘째 줄부터 K개의 줄에 걸쳐 메시지를 읽지 www.acmicpc.net 알고리즘 분류는 문자열, 구현으로 되어있다. 구현 문제가 맞기는 한데, 개인적으로 실버5 난이도보다는 살짝 높은 난이도의 구현이라고 생각했다. 풀이 아이디어 이 문제는 메세지를 보낸 사람과 그 메세지를 읽지 않은 사람의 숫자가 주어질 때, 임의로 선택한 메세지를 읽지 않은 가능성이 있는 사람을 모두 찾는 문제이다. 처음 이 문제를 봤을 때는 풀이..

자기계발/코딩테스트, 대회

UCPC(전국 대학생 프로그래밍 대회) 2021 예선 후기

사실 크게 나가야겠다는 생각을 하지 않고 있었는데, 에브리타임을 보다가 우연히 UCPC 모집글을 보게 되었고, 그냥 한번 나가볼까~ 해서 나갔다. 팀명은 마감하루전에타에서만나급조된팀 이였다ㅋㅋ 약 270개 정도의 팀이 참가했고, 10문제 중 5문제를 풀어서 72등이 되었다. 안타깝게도 본선에는 진출하기 힘들 것 같다. 그래도 정말 하루만에 급조된 팀 치고는 잘한 편인 것 같다ㅋㅋ 나는 B번, G번을 풀었는데, G번의 의도된 난이도가 플레티넘이라 정말 놀랐다. B번은 단순 BFS문제였는데 최초로 푼 팀이 대회 시작 3분만에 풀어서 정말 놀랐다.. G번은 내가 느끼기에는 그냥 수학문제였는데, 여러 인스턴스에 대해서 노가다를 했다. 그렇게 규칙을 찾아서 규칙에 맞게 문제를 풀었더니 AC를 받았다. 박스가 K개..

알고리즘 문제/BOJ (Python3, C++)

[백준] 9465 - 스티커

https://www.acmicpc.net/problem/9465 9465번: 스티커 첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스의 첫째 줄에는 n (1 ≤ n ≤ 100,000)이 주어진다. 다음 두 줄에는 n개의 정수가 주어지며, 각 정수는 그 위치에 해당하는 스티커의 www.acmicpc.net DP 유형의 '스티커' 문제이다. 데이터가 추가되면서 옛날에 맞았던 코드가 틀리자 다시 풀어보게 되었다. 기본적인 DP의 문제풀이 방식은 문제를 단계별로 쪼개어 이전단계에 푼 문제를 이번 단계 풀이에 활용하는 것이다. 이 문제는 이전 단계에 어떻게 문제를 풀었는지에 따라 이번 단계에 문제 풀이 방식이 달라진다는 점이 특징인 문제였다. 피보나치 수열, 정수삼각형과 같은 단순 메모이제이션 ..

개인 프로젝트/[2021] 코드악보 공유APP

15. 파이어베이스로 백엔드 이전 & 악보에 대한 CRUD 구현

악보에 대해 CRUD 구현을 완료했다. 그리고 백엔드를 오라클 클라우드를 이용한 리눅스 서버에서, BaaS인 파이어베이스로 이전했다. Firebase 로 이전한 배경 악보에 대해 수정과 삭제를 진행하기 위해서는 악보를 작성한 작성자를 구분할 수 있어야 한다. 유저 인증 기능을 손수 구현한다면 내가 생각하기에 DB에 아이디와 비밀번호를 저장해놓고 사용자가 입력하면 입력값을 DB의 데이터와 단순 비교하여 체크하는 방식으로 했을 것이다. 비밀번호의 경우, 데이터를 그대로 저장하는게 아니라 해시를 사용한다고 들었다. 또 여기저기에서 주워들은 이야기로는 토큰이니 세션과 쿠키니 그런 것으로 유저 인증을 한다고 들었는데, "아이디 + 비밀번호 + 해시" 이 3가지 조합외에 기술을 사용하는 이유는 아직 와닿지 않았다...

개인 프로젝트/[2021] 코드악보 공유APP

14. 악보 편집 기능 만들기 - UI수정, Provider, 편집한 악보 저장

악보 편집 기능의 핵심 기능을 완성했다. 3일 동안의 커밋 내역이다. 변경사항이 정말 많다. 3일동안 밥먹고 자는 시간 빼고 플러터로 코딩만 했다... (코딩 : 아키텍처 고안 : 디버깅,플러터 공부 = 3 : 2 : 5 정도 인 듯하다.) 1. DB에 코드를 저장하고, 저장한 코드를 불러오는 기능을 구현했다. 딱 '코드'만 저장하는게 아니라 코드를 포함한 줄 건너뜀과 같은 부분도 저장하도록 했다. 2. 코드셀을 보여줄 때, 높이가 높아지면 아래 코드가 키보드와 버튼 UI에 가려지는 문제를 수정했다. 원래 Scaffold() 위젯의 body 속성으로 코드셀을 넣어주고, 커스텀키보드와 버튼UI를 bottom 속성에 넣었었다. 그런데 bottom 속성은 기본적으로 body위에 스택처럼 덮어서 UI를 보여주는..

개인 프로젝트/[2021] 코드악보 공유APP

13. 악보 편집 기능 만들기 - 커스텀 키보드로 입력한 코드 띄우기, 깃허브 연결, DB에 테이블 추가

코드 구성요소 분류하기 이틀동안, 커스텀 키보드로 입력한 코드 구성요소를 따로따로 저장하고 저장한 요소를 조합하여 코드로 띄우는 기능을 만들었다. 이때 코드 구성요소를 저장하는 방법때문에 삽질을 많이 했다.. 코드 구성요소는 다음과 같다. 루트, 루트#/b, 루트 텐션, 마이너, 마이너텐션, 메이저, 메이저텐션, 텐션#/b, 텐션, ASDA, ASDA텐션, 베이스, 베이스#/b 이렇게 구성요소가 매우 많은 데에는 텐션의 위치가 여러군데 가능하기 때문이다. C2 와 같은 코드는 루트가 C이고, 루트 텐션이 2인 것으로 보았다. 루트 텐션과 그냥 텐션을 나눈 이유는 간단하다. C2(#9) 과 같은 코드를 작성하기 위해서이다. ASDA는 add, sus, dim, aug 의 첫글자를 따서 지었다. 저 4가지 ..

알고리즘 문제/BOJ (Python3, C++)

[백준] 2437 - 저울

https://www.acmicpc.net/problem/2437 2437번: 저울 하나의 양팔 저울을 이용하여 물건의 무게를 측정하려고 한다. 이 저울의 양 팔의 끝에는 물건이나 추를 올려놓는 접시가 달려 있고, 양팔의 길이는 같다. 또한, 저울의 한쪽에는 저울추들만 놓 www.acmicpc.net 알고리즘 스터디에서 '정렬' 연습문제로 풀게된 문제였다. 풀이 아이디어 내가 떠올린 기본적인 알고리즘은 다음과 같다. 1. 입력받은 추를 무게순으로 오름차순 정렬한다. 2. 추를 앞에서 하나 가져와서 "추 그룹"에 추가한다. 3. 추 그룹의 무게 합과 다음 추의 무게를 비교한다. 만약 다음 추의 무게가 '추 그룹의 무게합 + 1' 보다 크면, 어떤 방법을 써도 '추 그룹의 무게합 + 1' 의 무게는 잴 수 ..

개인 프로젝트/[2021] 코드악보 공유APP

12. 악보 편집 기능 만들기 - 커스텀 키보드 토글 버튼 기능 구현

오늘은 하루종일 커스텀 키보드의 토글 버튼 기능을 구현했다. 이 작업이 굉장히 복잡해서 하루종일 머리를 싸매면서 만들었다. 오늘 구현한 것은 토글 버튼에 색을 입히고, 코드 구성 변수에 따라 토글 버튼 상태를 조정하는 일이었다. 최종 결과는 아래 사진과 같다. 색이 굉장히 알록달록해졌다ㅎㅎ 기존 키보드 배경색이 너무 진한 것 같아서 버튼의 색을 강조하기 위해 색을 연하게 바꾸었다. 그리고 선택된 버튼들은 같은 종류끼리 같은색을 가지도록 하였다. (이게 제일 힘들었다.. 코드가 복잡해진 요인 1순위) 위 키보드가 나타내는 코드는 Cm7(#13)add4/G# 이라는 굉장히.. 이상한 코드이다 ㅋㅋ 이걸 구현할 때 제일 힘들었던 부분은 코드 타입을 정하는 부분이었다. 특히 저 '숫자'가 들어가는 부분이 구현하..

에버듀
Blog. 에버듀