전체 글 118

Annotation(애너테이션, 어노테이션)

책 을 참고해 작성했습니다. Annotation 자바를 개발한 사람들은 소스코드에 대한 문서를 따로 만들기보다 소스코드와 문서를 하나의 파일로 관리하는 것이 낫다고 생각했다. 그래서 소스코드의 주석 /** ~ */ 에 소스코드에 대한 정보를 저장하고, 소스코드의 주석으로부터 HTML 문서를 생성해내는 프로그램(javadoc.exe)을 만들어서 사용했다. 주석 안에 소스코드에 대한 설명들이 있고, 그 안에 '@'이 붙은 태그들, 이 미리 정의된 태그들을 이용해서 주석 안에 정보를 저장하고, javadoc.exe 라는 프로그램이 이 정보를 읽어서 문서를 작성하는데 사용한다. 이 기능을 응용하여, 프로그램의 소스코드 안에 다른 프로그램을 위한 정보를 미리 약속된 형식으로 포함시킨 것이 바로 애너..

프로그래머스 | python | 괄호 변환 | 용기의 문제

코딩테스트 연습 - 괄호 변환 힌트 없이 풀었다. 와! 문제에 있는 설명대로 구현했더니 풀 수 있었다. 의외로 구현 난이도는 쉬운 편이었다. 이 문제를 풀려면 일단 용기가 필요했다. level 2만큼의 용기가 필요하다. 처음에 봤을 때 막막해서 풀지 않았다. 결국 계속 다른 문제를 풀고 돌아돌아 도착한 문제다. def solution(given_string): if given_string == "": return "" undividable_balanced, balanced = divide_string_to_2_balanced(given_string) if is_right_bracket(undividable_balanced): return undividable_balanced + solution(balan..

카카오 OPEN API, KAKAO POSE(카카오 포즈) 사용해보기

자세 교정을 위한 앱을 만들기 위해 활용할 수 있는 API가 없나 탐색하던 중 카카오 포즈를 찾았다. 문서를 보고 실습해보기로 했다. 실시간으로 자세 교정을 할 수 있으면 좋겠지만 현재 영상 분석에 길이 제한이 있는 것으로 보아 고용량의 요청은 비용이 들 것이다. 따라서 현재 나의 목적인 '책상 앞에 있는 자세'를 교정하는 것이 목적이라면, 굳이 실시간으로 찍는 것이 아니라 5초, 10초 간격으로 사진을 찍어 분석하는 것도 충분하다고 생각됐다. 테스트 해보기 카카오 포즈 가이드 구현 예제를 통해 쉽게 실습해볼 수 있다. 카카오 포즈 가이드 구현 예제에 오타가 있다. 아마 그대로 실행하면 AttributeError: module 'cv2.cv2' has no attribute 'COLOR_BGR2RG' 에..

일반 2020.12.24

프로그래머스 | python | 스킬트리

코딩테스트 연습 - 스킬트리 소요 시간 1시간 30분, 풀다 못하겠어서 다른 사람 풀이 참조함. 무작위로 이뤄진 문자열(A)에 포함된 특정 문자열(B)의 문자들이 그 특정 문자열(B)의 순서를 지키는지 검사하는 문제였다. A = "awegd", B = "ag" → A의 a,g가 B의 순서를 지키고 있다. A = "gwaed", B = "ag" → A의 a,g가 B의 순서를 지키고 있지 않다. 나의 풀이 from collections import deque def solution(skill_order, skill_trees): answer = len(skill_trees) skill_order = skill_order for skill_tree in skill_trees: skill_order_queue ..

프로그래머스 | python | level 2 | 올바른 괄호

어려울 줄 알았는데 쉽게 풀었다. 아이디어는 간단했다. "()"를 계속 삭제해가면 된다. 그래서 처음엔 replace() 함수를 사용했다. 하지만 효율성 테스트를 통과하지 못했다. 그래서 매번 문자열을 탐색에 중간 값을 삭제하는 replace가 아니라, 차례대로 탐색해가며 삭제하는 게 무엇이 있을까 생각했다. 오, 그렇다. 스택을 떠올렸다. 스택을 사용했더니 효율성 테스트를 통과했다. 가장 끝의 두 값이 완전한 괄호("()")가 되면 pop하여 없애는 방식으로 구현했다. 인덱스가 없어 오류가 생기는 경우를 처리하기 위해 try except 구문을 사용했다. 첫 풀이, 효율성 테스트를 통과하지 못 했다. def solution(s): # 올바른 괄호 for _ in range(len(s)): s = s.r..

프로그래머스 | python | level 2 | 다리를 지나는 트럭

푸는 데 걸린 시간 → 2시간에서 3시간 사이 collections 모듈의 deque를 사용해 풀었다. 풀이는 처음에 풀지 못하고 다른 사람의 풀이를 보고 힌트를 얻었다. 하지만 특정 테스트케이스에서 계속 시간초과가 나서 풀지 못하고 있었다. 시간 초과를 어떻게 없앨까 고민하면서, 쓸데 없는 연산에 대한 통찰이 늘었다. 아무 생각 없이 쓰고 있던 sum(bridge)가 문제였다. 테스트케이스 5에서 계속 막히던 코드 from collections import deque def solution(bridge_length, weight_bridge_can_hold, truck_weights): time = 0 bridge = deque([0] * bridge_length) truck_weights = dequ..

프로그래머스 | python | level 2 | 튜플 | 어거지로 풀고 공부하기

2시간 안 쪽으로 푼 것 같다. 내 최초 풀이 # 튜플 def solution(s): answer = [] given_list_without_braket = list(map(lambda x: x.split(","), s[2:-2].split("},{"))) number_count_dict = dict() for element in given_list_without_braket: for number in element: if number in number_count_dict: number_count_dict[number] = number_count_dict[number] + 1 else: number_count_dict[number] = 1 for item in sorted( list(number_coun..

우아한 테크코스 코딩테스트 + 프리코스 회고

일정 서류 지원 ~ Nov 4, 2020 1차 코딩 테스트 Nov 7, 2020 프리코스 Nov 25, 2020 → Dec 15, 2020 최종 코딩 테스트 Dec 19, 2020 서류 지원 질문들이 하나 같이 흥미로웠고 과거를 돌아보고 앞으로 어떻게 살지 생각하는 데 도움이 됐다. 1년 이상 꾸준히 한 것에 블로그와 일기를 적었다. 내년 3월이 되면 프로그래밍도 함께 말할 수 있겠다. 증빙을 위한 포트폴리오 노션 페이지를 처음 만들었다. 1차 코딩 테스트 7문제 중 5문제를 풀었다. 못 푼 두 문제는 그래프 문제 같아 보였다. 사실, 문제를 정확히 이해하지도 못했기 때문에 어떤 자료구조와 알고리즘을 써야하는지 알지 못했다. 프리코스 가장 많이 배우고 성장했던 시기이다. 3주에 걸쳐 숫자 야구, 자동차 ..

package, import, static import

패키지(package) 하나의 소스 파일에는 첫 번째 문장으로 단 한 번의 패키지 선언만을 허용한다. 모든 클래스는 반드시 하나의 패키지에 속해야 한다. 패키지는 점(.)을 구분자로 하여 계층 구조로 구성할 수 있다. 패키지는 물리적으로 클래스 파일(.class)을 포함하는 하나의 디렉토리이다. 클래스의 실제 이름은 패키지명을 포함한 것이다. 같은 이름의 클래스 일지라도 서로 다른 패키지에 존재하는 것이 가능하다. 소스파일에 자신이 속할 패키지를 지정하지 않은 클래스는 자동적으로 '이름 없는 패키지'에 속하게 된다. -d 옵션 package com.javachobo.book; 위 패키지 선언문이 들어가 있는 소스 파일(PackageTest.java)을 작성한 뒤 '-d 옵션'..

백준 온라인 저지 | 4673 | 함수: 셀프 넘버

문제 셀프 넘버는 1949년 인도 수학자 D.R. Kaprekar가 이름 붙였다. 양의 정수 n에 대해서 d(n)을 n과 n의 각 자리수를 더하는 함수라고 정의하자. 예를 들어, d(75) = 75+7+5 = 87이다. 양의 정수 n이 주어졌을 때, 이 수를 시작해서 n, d(n), d(d(n)), d(d(d(n))), ...과 같은 무한 수열을 만들 수 있다. 예를 들어, 33으로 시작한다면 다음 수는 33 + 3 + 3 = 39이고, 그 다음 수는 39 + 3 + 9 = 51, 다음 수는 51 + 5 + 1 = 57이다. 이런식으로 다음과 같은 수열을 만들 수 있다. 33, 39, 51, 57, 69, 84, 96, 111, 114, 120, 123, 129, 141, ... n을 d(n)의 생성자라..