https://www.acmicpc.net/problem/9465 9465번: 스티커 첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스의 첫째 줄에는 n (1 ≤ n ≤ 100,000)이 주어진다. 다음 두 줄에는 n개의 정수가 주어지며, 각 정수는 그 위치에 해당하는 스티커의 www.acmicpc.net DP 유형의 '스티커' 문제이다. 데이터가 추가되면서 옛날에 맞았던 코드가 틀리자 다시 풀어보게 되었다. 기본적인 DP의 문제풀이 방식은 문제를 단계별로 쪼개어 이전단계에 푼 문제를 이번 단계 풀이에 활용하는 것이다. 이 문제는 이전 단계에 어떻게 문제를 풀었는지에 따라 이번 단계에 문제 풀이 방식이 달라진다는 점이 특징인 문제였다. 피보나치 수열, 정수삼각형과 같은 단순 메모이제이션 ..
악보에 대해 CRUD 구현을 완료했다. 그리고 백엔드를 오라클 클라우드를 이용한 리눅스 서버에서, BaaS인 파이어베이스로 이전했다. Firebase 로 이전한 배경 악보에 대해 수정과 삭제를 진행하기 위해서는 악보를 작성한 작성자를 구분할 수 있어야 한다. 유저 인증 기능을 손수 구현한다면 내가 생각하기에 DB에 아이디와 비밀번호를 저장해놓고 사용자가 입력하면 입력값을 DB의 데이터와 단순 비교하여 체크하는 방식으로 했을 것이다. 비밀번호의 경우, 데이터를 그대로 저장하는게 아니라 해시를 사용한다고 들었다. 또 여기저기에서 주워들은 이야기로는 토큰이니 세션과 쿠키니 그런 것으로 유저 인증을 한다고 들었는데, "아이디 + 비밀번호 + 해시" 이 3가지 조합외에 기술을 사용하는 이유는 아직 와닿지 않았다...
악보 편집 기능의 핵심 기능을 완성했다. 3일 동안의 커밋 내역이다. 변경사항이 정말 많다. 3일동안 밥먹고 자는 시간 빼고 플러터로 코딩만 했다... (코딩 : 아키텍처 고안 : 디버깅,플러터 공부 = 3 : 2 : 5 정도 인 듯하다.) 1. DB에 코드를 저장하고, 저장한 코드를 불러오는 기능을 구현했다. 딱 '코드'만 저장하는게 아니라 코드를 포함한 줄 건너뜀과 같은 부분도 저장하도록 했다. 2. 코드셀을 보여줄 때, 높이가 높아지면 아래 코드가 키보드와 버튼 UI에 가려지는 문제를 수정했다. 원래 Scaffold() 위젯의 body 속성으로 코드셀을 넣어주고, 커스텀키보드와 버튼UI를 bottom 속성에 넣었었다. 그런데 bottom 속성은 기본적으로 body위에 스택처럼 덮어서 UI를 보여주는..
코드 구성요소 분류하기 이틀동안, 커스텀 키보드로 입력한 코드 구성요소를 따로따로 저장하고 저장한 요소를 조합하여 코드로 띄우는 기능을 만들었다. 이때 코드 구성요소를 저장하는 방법때문에 삽질을 많이 했다.. 코드 구성요소는 다음과 같다. 루트, 루트#/b, 루트 텐션, 마이너, 마이너텐션, 메이저, 메이저텐션, 텐션#/b, 텐션, ASDA, ASDA텐션, 베이스, 베이스#/b 이렇게 구성요소가 매우 많은 데에는 텐션의 위치가 여러군데 가능하기 때문이다. C2 와 같은 코드는 루트가 C이고, 루트 텐션이 2인 것으로 보았다. 루트 텐션과 그냥 텐션을 나눈 이유는 간단하다. C2(#9) 과 같은 코드를 작성하기 위해서이다. ASDA는 add, sus, dim, aug 의 첫글자를 따서 지었다. 저 4가지 ..
https://www.acmicpc.net/problem/2437 2437번: 저울 하나의 양팔 저울을 이용하여 물건의 무게를 측정하려고 한다. 이 저울의 양 팔의 끝에는 물건이나 추를 올려놓는 접시가 달려 있고, 양팔의 길이는 같다. 또한, 저울의 한쪽에는 저울추들만 놓 www.acmicpc.net 알고리즘 스터디에서 '정렬' 연습문제로 풀게된 문제였다. 풀이 아이디어 내가 떠올린 기본적인 알고리즘은 다음과 같다. 1. 입력받은 추를 무게순으로 오름차순 정렬한다. 2. 추를 앞에서 하나 가져와서 "추 그룹"에 추가한다. 3. 추 그룹의 무게 합과 다음 추의 무게를 비교한다. 만약 다음 추의 무게가 '추 그룹의 무게합 + 1' 보다 크면, 어떤 방법을 써도 '추 그룹의 무게합 + 1' 의 무게는 잴 수 ..
오늘은 하루종일 커스텀 키보드의 토글 버튼 기능을 구현했다. 이 작업이 굉장히 복잡해서 하루종일 머리를 싸매면서 만들었다. 오늘 구현한 것은 토글 버튼에 색을 입히고, 코드 구성 변수에 따라 토글 버튼 상태를 조정하는 일이었다. 최종 결과는 아래 사진과 같다. 색이 굉장히 알록달록해졌다ㅎㅎ 기존 키보드 배경색이 너무 진한 것 같아서 버튼의 색을 강조하기 위해 색을 연하게 바꾸었다. 그리고 선택된 버튼들은 같은 종류끼리 같은색을 가지도록 하였다. (이게 제일 힘들었다.. 코드가 복잡해진 요인 1순위) 위 키보드가 나타내는 코드는 Cm7(#13)add4/G# 이라는 굉장히.. 이상한 코드이다 ㅋㅋ 이걸 구현할 때 제일 힘들었던 부분은 코드 타입을 정하는 부분이었다. 특히 저 '숫자'가 들어가는 부분이 구현하..
오늘은 하루종일 코드 줄넘김/줄넘김 취소 기능을 구현하고, 커스텀 키보드 디자인을 구상하고 구현하는데 집중했다. 아직 커스텀 키보드의 구현과 구상은 100% 완료되지 않았다. 오늘의 프로젝트 진행과정을 자세하게 정리해보고자 한다. 코드 줄넘김 / 줄넘김 취소 기능 구현 코드 줄넘김 / 줄넘김 취소 기능이라고만 하면 와닿지가 않을 것이다. 텍스트를 입력할 때 '엔터키'를 생각하면 된다. 이렇게 텍스트로 코드를 입력한 상태라고 생각해보자. 현재 커서는 사진에 보아는 대로 Em7 앞에 가있다. 이 상태에서 엔터키를 누르면 이렇게 코드가 한 줄 아래로 이동하며, 뒤따른 코드들이 모두 아래로 이동한다. 지금 이건 텍스트로 되어있기 때문에 알아서 편리하게 구현이 되지만 이걸 코드셀 객체에 대해서 구현해야한다. 스택..
이전 포스팅까지 작업한 결과로 새 악보를 만드는 화면을 띄우는 것까지 만들었다. 이제 새 악보를 만드는 화면에서 악보를 편집하는 기능을 추가하고자 한다. 앱 디자인 구상 및 '커스텀 탭 뷰' 적용 우선 악보추가 기능 만들기 (1) 포스팅에서 다뤘던 내용을 그대로 구현하되, 기능을 추가하기로 했다. 대부분의 노래는 verse와 chorus가 반복되는 구조이다. 보통 나오는 구조는 다음과 같다. verse1 - chorus1 - verse2 - chorus2 - bridge - chorus3 이때 보통 verse끼리, 그리고 chorus끼리는 코드가 겹치는 경우가 많지만, verse와 chorus의 코드가 겹치기도 한다. 만약 이런 구조의 코드 악보를 그린다면 똑같은 코드진행을 계속 반복해서 그려야만 한다...
플러터의 TextField 위젯을 기본값으로 실행시키면 다음과 같은 모습으로 나온다. 빨간색 네모로 표시한 부분을 보면 곡 제목과 그 아래 밑줄 사이의 간격이 꽤 넓다. 이 간격을 줄이는 방법을 알아내기 위해 구글을 미친듯이 검색했고, 플러터 공식 API 문서도 열심히 뒤졌다. 그리고 직접적인 답은 찾지 못했지만, 검색해서 얻은 정보들을 조합하여 답을 알아냈다... 저 간격을 조정하려면 TextField위젯의 decoration 속성에 TextInputDecoration() 객체를 설정하여 달아주어야 한다는 것을 검색을 통해 알게되었다. 그리고 안드로이드 스튜디오를 이용하여, 저 TextInputDecoration() 객체에 설정할 수 있는 모든 속성을 샅샅히 살펴본 결과 contentPadding 이라..
https://www.acmicpc.net/problem/15815 15815번: 천재 수학자 성필 길이가 100이 넘지 않는 수식이 예제 입력과 같이 공백 없이 입력된다. 수식은 0부터 9까지의 숫자와 연산자 '+', '-', '*', '/' 로만 이루어져 있다. 또한, 수식의 계산 중간 과정의 모든 결과는 항상 2 www.acmicpc.net 동아리 알고리즘 스터디의 멘토로서, 스택 연습문제 추천을 위해 스택 문제를 찾던 중 후위연산식 문제와 유사한 문제를 발견하여 풀어보았다. 후위연산식 문제가 중위연산식 문제를 후위연산식으로 고치는 문제라면 이 문제는 후위연산식을 보고 그 값을 계산한 결과를 출력하는 문제이다. 처음에는 소수점 부분에 이상하게 얽메여서 삽질을 좀 했지만, 중간 계산 결과가 항상 정수..