일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 다이나믹 프로그래밍
- 클린코드
- 알고리즘
- 순환
- 코딩테스트
- front-end
- 정렬
- android
- algorithm
- DFS
- 프로그래머스
- 검색트리
- javascript
- Color
- BFS
- SWEA
- Kotlin
- CSS
- 자바
- CleanCode
- DP
- html
- SQL
- 구현
- inflearn
- Web
- 해슁
- codecademy
- java
- Spring
- Today
- Total
목록분류 전체보기 (183)
깡뇽
함수보다 더 높은 단계인 클래스 코드를 깨끗하게 작성하도록 해야 한다. 클래스 체계 자바를 사용하면 "변수 목록, 정적 공개 상수, 정적 비공개 변수, 비공개 인스턴스 변수, (공개 변수), 공개함수, 비공개 함수" 의 순서로 추상화 단계에 따라서 나타난다. - 캡슐화 변수와 유틸리티 함수는 공개하지 않는 편이 낫지만 꼭 숨겨야 하는 것은 아니다. 같은 패키지 안에서 테스트 코드가 함수를 호출하거나 변수를 사용해야 하면 해당 함수나 변수를 protected로 선언하거나 패키지 전체로 공개한다. 캡슐화에 대한 결정은 마지막 수단이다. 클래스는 작아야 한다! 함수 작성과 마찬가지로 클래스도 작을수록 좋은데 메서드의 개수를 줄여야 하며, 클래스의 역할을 반영하는 적절한 간결한 이름을 지을 수 있어야 한다. -..

문자열과 관련된 유형들도 열심히 풀어보려고 한다. 테스트 케이스의 개수를 입력받는다. 테스트 케이스는 O와 X로 이루어진 한 줄의 문자열인데 O의 연속되는 계수만큼 점수를 받는다. 예를 들어, "OOXXOXXOOO"의 점수는 1+2+0+0+1+0+0+1+2+3 = 10점이 된다. 8958번 OX퀴즈 풀이 [시도1] 맞았습니다!! n = int(input()) # 테스트 케이스 반복 for _ in range(n): scores = [] #초기화 score = 0 #초기화 result = input() #OX퀴즈 문자열 입력 for i in range(len(result)): # O가 나오면 점수를 1 더해줌 if result[i] == "O": score += 1 # X가 아닌 O로 문자열이 끝나더라도 ..
TDD, 애자일과 같은 프로세스들과 함께 이 분야의 많은 발전이 이루어졌는데 그만큼 제대로 된 테스트 케이스 작성에도 신경을 써야 한다. * TDD(Test Driven Development) 테스트 주도 개발 : 매우 짧은 개발 사이클을 반복하는 소프트웨어 개발 프로세스 중 하나이다. 개발자는 먼저 요구사항을 검증하는 자동화된 테스트 케이스를 작성한다. 그런 후에, 그 테스트 케이스를 통과하기 위한 최소한의 코드를 생성한다. 마지막으로 작성한 코드를 표준에 맞도록 리팩토링한다. - 위키백과 TDD 법칙 세 가지 1. 실패하는 단위 테스트를 작성할 때까지 실제 코드를 작성하지 않는다. 2. 컴파일은 실패하지 않으면서 실행이 실패하는 정도로만 단위 테스트를 작성한다. 3. 현재 실패하는 테스트를 통과할 정..

BFS 문제로 간다...!!! 4963번 섬의 개수 풀이 [시도1] 맞았습니다!! with 솔루션 from collections import deque def bfs(x, y): queue = deque() queue.append((x,y)) ground[x][y] = 0 dx = [-1, 1, 0, 0, 1, -1, -1, 1] dy = [0, 0, -1, 1, 1, -1, 1, -1] while queue: position = queue.popleft() for i in range(8): nx = position[0] + dx[i] ny = position[1] + dy[i] if 0

DFS 유형의 문제를 풀어보았다. 2210번 숫자판 점프 풀이 #솔루션 board = [] # 입력 받는 숫자판 result = [] # 완성된 여섯 자리 숫자들 # 숫자판 입력 for _ in range(5): line = list(map(str, input().split())) board.append(line) # 상,하,좌,우 방향 dx = [-1, 1, 0, 0] dy = [0, 0, -1, 1] def dfs(x, y, num): if len(num) == 6: # 6자리의 숫자가 완성되면 if num not in result: # 중복이 있는지 확인해서 없으면 result.append(num) # 추가 return # 상, 하, 좌, 우 이동 for i in range(4): nx = x + ..

1. 설치를 위해서 RunCat_for_windows 의 Release로 이동한다. 2. RunCat_x64.zip 파일을 다운로드 받는다. 3. 다운로드가 완료되면 압축을 풀고, RunCat을 실행시킨다. 4. .Net을 깔아야 한다고 경고창이 떴다. .Net을 깔아보자. .Net 설치 사이트 에서 Run desktop apps의 Download_x64 버튼을 클릭하여 다운을 진행한다. 다운이 완료된 뒤에 실행만 시켜주면 알아서 설치가 완료된다. 5. 다시 RunCat을 실행시킨다. 와다다다다ㅏㄱ 달리는 귀여운 고양이를 볼 수 있다..!!

브루트 포스 유형의 Bronze 문제를 하나 더 풀어보았다. 2231번 분해합 풀이 [시도1] 맞았습니다!! n = int(input()) for i in range(n): num = i sum = 0 for j in range(len(str(i))): sum += int(str(num)[j]) if (i + sum) == n: result = i break print(result) 입력값 n의 생성자를 구해야 하는데 예를 들어, 245의 분해합은 256(=245+2+4+5)이므로 256의 생성자가 된다. 가장 작은 생성자를 찾거나 생성자가 없으면 0을 출력하면 되기 때문에 0부터 n까지 모든 숫자들이 n의 생성자인지 찾도록 한다. for문을 0부터 n까지 돌리는데 값이 i일 때에 i의 각 자리에 있는 ..

브루트포스 Bruteforcing 알고리즘 유형의 문제라고 한다. 무차별적으로 대입하는 그냥 다 확인해보는 그런 유형이라고 할 수 있다. (완전탐색) Bronze 2 레벨에 속하는 문제인데 이 문제는 꼭 풀이를 보지 않고 풀겠노라 다짐하면서 시작한다. 2798번 블랙잭 풀이 [시도1] 맞았습니다!! n, m = map(int, input().split()) numbers = list(map(int, input().split())) big = 0 for i in range(0, n): for j in range(i+1, n): for k in range(j+1, n): sum = numbers[i] + numbers[j] + numbers[k] if sum > big and sum

깊이 우선 탐색 DFS 유형의 문제를 선택했다. DFS 개념은 방향 없는 그래프를 기본으로 하여 설명되곤 하는데 본 개념을 그대로 문제로 나타낸 것이다. 정점 N개와 간선 M개가 주어지고 M개의 줄에 간선 양 끝점인 u와 v가 주어지는데 이때 연결되는 요소의 개수를 구해야 한다. 11724번 연결 요소의 개수 풀이 [시도1] 맞았습니다!! with 솔루션 n, m = map(int, input().split()) graph = [[] for _ in range(n+1)] cnt = 0 # graph 채우기 for _ in range(m): u, v = map(int, input().split()) # 방향이 없으므로 두 개 모두 추가 graph[u].append(v) graph[v].append(u) #..

DP 유형의 문제를 풀어보자. 라고 다짐하고 문제 봤는데 이게 뭐지...? 했다...ㅎ DP 유형이면 당연히 점화식을 만들줄 알아야 하는데.. 앞으로 꼭 차근차근 맨 처음 경우부터 일단 계산해봐야지!!! 테스트 케이스 개수 만큼의 입력받은 수를 1, 2, 3의 덧셈으로 표현할 때의 표현 가능한 경우의 수를 구하면 된다. 1, 2, 3일 때에는 규칙성이 보이지 않지만 4일 때부터는 규칙을 찾을 수 있다. 1과 2와 3일 때에 경우에 각각 1, 2, 3을 활용하여 다시 경우가 구해지기 때문이다. 9095번 1, 2, 3 더하기 풀이 #솔루션 T = int(input()) def dp(i): if i == 1: return 1 elif i == 2: return 2 elif i == 3: return 4 el..
오류 처리 코드로 인해 실제 코드 맥락 등을 이해하기 어려울 수 있으니 깨끗한 코드와 오류 처리는 연관성이 있다고 할 수 있다. 오류 코드보다 예외를 사용하라 호출자를 사용해 오류를 반환하기 보다는 오류가 발생하면 예외를 던지도록 코딩하면 깨끗한 코드를 작성할 수 있다. Try-Catch-Finally 문부터 작성하라 try 블록에서 오류가 생기면 catch 블록으로 넘어가기 때문에 프로그램 상태를 일관성 있게 유지해 준다. try-catch 구조로 범위를 정의했으니 TDD를 사용해서 필요한 나머지 논리들도 추가하여 코드를 작성할 수 있다. 즉, 저자는 강제로 예외가 발생되는 테스트 케이스를 먼저 작성하고 나서 테스트를 통과하게 코드를 작성하는 방법을 권장한다. * TDD(Test Driven Devel..

루시와 엘라 찾기 #방법1 SELECT ANIMAL_ID, NAME, SEX_UPON_INTAKE FROM ANIMAL_INS WHERE NAME IN ('Lucy','Ella','Pickle','Rogan','Sabrina','Mitty') ORDER BY ANIMAL_ID; #방법2 SELECT ANIMAL_ID, NAME, SEX_UPON_INTAKE FROM ANIMAL_INS HAVING NAME = 'Lucy' OR NAME = 'Ella' OR NAME = 'Pickle' OR NAME = 'Rogan' OR NAME = 'Sabrina' OR NAME = 'Mitty' ORDER BY ANIMAL_ID; 내가 작성한 쿼리는 방법2인데 너무 비효율적이라고 생각하여 해답을 찾아보았더니 많은 사..