11049

오답 여부: o 편집 시간: 2022년 3월 28일 오후 3:55 코드 Algorithm/11049.py at main · Junroot/Algorithm 풀이 잘못된 풀이 i번째에서 j번째 행렬 연산의 최소값은 (i번째에서 j-1번째 행렬 연산의 최소값) + (j번째 행렬 연산) 과 (i+1번째에서 j번째 행렬 연산의 최소값) + (i번째 행렬의 연산) 이라고 착각해서 풀었다. 실제로는 양 끝에 추가하는 경우 뿐만 아니라 i번째에서 j번째 행렬 사이에 끊을 수 있는 모든 경우를 다 비교해봐야된다. 맞는 풀이 위 잘못된 풀이를 수정하여, i번째에서 j번째 행렬 연산의 최소값은...

2024-09-15 · 1 min · 100 words

11-리액티브 API 개발하기

스프링 WebFlux: 스프링 5의 새로운 리액티브 웹 프레임워크 스프링 WebFlux 사용하기 스프링MVC 같은 전형적인 서블릿 기반의 웹 프레임워크는 스레드 블로킹과 다중 스레드로 수행된다. 기본적으로 하나의 요청 당 하나의 스레드가 처리하고, 하나의 스레드 내에서 대부분의 상호 작용이 블록킹된다. 블로킹 웹 프레임워크는 요청량의 증가에 따른 확장이 어렵다. 처리가 느린 작업 스레드로 인해 스레드 풀로 반환되어 또 다른 요청 처리를 준비하는 데 많은 시간이 걸린다. 비동기 웹 프레임워크는 적은 수의 스레드로 더 높은 확장성을 성취한다....

2024-09-15 · 6 min · 1093 words

11-단위 테스트 안티 패턴

안티 패턴: 겉으로 적절한 것처럼 보이지만 장래에 더 큰 문제로 이어지는 반복적인 문제 비공개 메서드 단위 테스트 비공개 메서드와 테스트 취약성 비공개 메서드를 노출하는 경우 식별할 수 있는 동작만 테스트하는 것을 위반한다. 비공개 메서드를 노출하면 테스트가 구현 세부 사항과 결합되고 결과적으로 리팩터링 내성이 떨어진다. 비공개 메서드와 불필요한 커버리지 비공개 메서드가 너무 복잡해서 식별할 수 있는 동작으로 테스트하기에 충분히 커버리지를 얻을 수 없는 경우가 있다. 이런 경우 두 가지 문제가 존재할 수 있다....

2024-09-15 · 3 min · 561 words

11-고리타분한 버그 수정

버그 수정은, 수정한 버그 가치가 수정 비용을 넘어설 때만 그의미가 있음에도 불고하고 해야된다. 무해한 버그일지라도, 회사와 제품 평판이 나빠지며, 장기적으로는 수익 감소를 초래한다. 경제적인 면에서 수정할 가치가 있는 버그를 찾아내는 방법 찾아낸 버그를 모두 확인하십시오. 무료 데모 서버에서 모든 버그를 포획하는데, 가능한 많은 정보를 수집해 전체 내용을 정리해서 개발팀으로 이메일을 보낸다. 기술지원 통화내역을 버그추적의 힌트로 사용한다. 경제적인 피드백을 확인하십시오. 경비를 영업부서 비용으로 계산하는 방법 제품 자체 버그문제로 기술지원 전화를 걸었을 때, 통화비를 사용자에게 전가시키지 않고 회사가 부담하는 방법 버그를 모두 수정하는 작업이 어떤 값어치가 있는지 계산기를 두드려 보십시오....

2024-09-15 · 1 min · 88 words

11-DSL 만들기

API에서 DSL로 궁극적인 목표: 코드의 가독성과 유지 보수성을 가장 좋게 유지하는 것 깔끔한 API의 의미 코드를 읽는 독자들이 어떤 일이 벌어질지 명확하게 이해할 수 있어야 한다. 이름과 개념을 잘 선택하면 이런 목적을 달성할 수 있다. 어떤 언어를 상요하건 일므을 잘 붙이고 적절한 개념을 사용하는 것은 매우 중요하다. 코드가 간결해야 한다. 불필요한 구문이나 번잡한 준비 코드가 가능한 한 적어야 한다. 깔끔한 API는 언어에 내장된 기능과 거의 구분할 수 없다. 코틀린 DSL도 온전히 컴파일 시접에 타입이 정해진다....

2024-09-15 · 3 min · 492 words

10942

오답 여부: o 편집 시간: 2022년 3월 15일 오후 2:35 코드 Algorithm/10942.py at main · Junroot/Algorithm 풀이 질문의 개수가 최대 1,000,000개이므로 질문하는 순간 팰린드롬을 계산하면 시간 초과가 발생한다는 것을 알 수 있다. 그러면 미리 팰린드롬을 계산해둬야 되는데 수열의 크기가 최대 2,000이므로 O(N^2)내로 해결해야된다. 어떤 팰린드롬이 있을 때 이 수열의 왼쪽, 오른쪽에 같은 수를 붙이면 계속 팰린드롬이라는 성질을 이용해 문제를 접근했다. 잘못된 풀이 나는 위의 성질을 이용해서 길이가 1, 2인 팰린드롬들을 구하고 이 팰린드롬에서 왼쪽과 오른쪽을 늘리면서 구할 수 있는 모든 팰린드롬을 구했다....

2024-09-15 · 2 min · 351 words

10866

편집 시간: 2022년 2월 7일 오후 8:38 코드 Algorithm/10866.py at main · Junroot/Algorithm 풀이 양방향 링크드 리스트를 이용해서 덱을 만들었다.

2024-09-15 · 1 min · 20 words

10845

편집 시간: 2022년 1월 31일 오후 6:35 코드 Algorithm/10845.py at main · Junroot/Algorithm Algorithm/10845-2.py at main · Junroot/Algorithm 풀이 큐를 사용할 수 있는 라이브러리인 deque를 사용하면 쉽게 해결이 가능하다. 만약 라이브러리를 사용하고 문제플 해결하고 쉽다면 두 번째 코드를 확인하면된다.

2024-09-15 · 1 min · 39 words

10828

편집 시간: 2022년 1월 31일 오후 5:52 코드 Algorithm/10828.py at main · Junroot/Algorithm 풀이 배열을 이용해서 쉽게 스택을 구현할 수 있다. 하지만 입력에 대한 주의점이 있다. input() 함수는 느리기 때문에, 많은 수의 입력이 있을 경우에는 input() 함수보다는 sys.stdin.readline() 을 사용하는 것이 좋다. 각 명령어를 입려할 때마다 출력을 하는 것 보다 출력할 값을 배열 형태로 모아둔 다음 “\n”.join(answers) 형태로 출력하는 것이 더 효율적이다.

2024-09-15 · 1 min · 62 words

10816

편집 시간: 2022년 2월 7일 오후 9:04 코드 Algorithm/10816.py at main · Junroot/Algorithm 풀이 lower bound, upper bound 이진 탐색을 이용해서 각 숫자의 개수를 구했다. 다른 사람 풀이 해쉬맵을 이용한 방법도 있다. from sys import stdin _ = int(input()) n = [int(i) for i in stdin.readline().split()] _ = int(input()) m = [int(i) for i in stdin.readline().split()] hashmap = {} for i in n: if i in hashmap: hashmap[i] += 1 else: hashmap[i] = 1 print(' '....

2024-09-15 · 1 min · 86 words

10814

편집 시간: 2022년 2월 7일 오후 8:36 코드 Algorithm/10814.py at main · Junroot/Algorithm 풀이 입력된 순서를 데이터로 함께 저장하고 있으면 정렬하기 쉽다. 이 때, 입력으로 받은 age 가 문자열인지 숫자인지 확인할 필요가 있다. 다른 사람 풀이 딕셔너리를 이용해서 푸는 방법도 있다. 키를 나이로 하는 딕셔너리에 입력순으로 추가하면 순서를 보장한채로 정렬이 가능하다. import sys input = sys.stdin.readline print = sys.stdout.write N = int(input()) people = {} for n in range(N): age, name = map(str, input()....

2024-09-15 · 1 min · 102 words

1074

편집 시간: 2022년 2월 12일 오후 9:51 코드 Algorithm/1074.py at main · Junroot/Algorithm 풀이 재귀로 분할 정복을 하면 쉽게 해결할 수 있다. 이 때, 굳이 모든 구역을 하나씩 셀필요 없이 찾고자 하는 위치가 포함된 구역만 재귀로 확인하면된다. 현재 정사각형의 1 / 4 크기의 칸의 개수는 구할 수 있기 때문이다.

2024-09-15 · 1 min · 49 words

10250

편집 시간: 2022년 1월 31일 오후 6:05 코드 Algorithm/10250.py at main · Junroot/Algorithm 풀이 X와 Y부분을 분리해서 생각해보자. H = 6, W = 12인 경우 아래를 만족한다. N이 1 ~ 6 → X = 1 7 ~ 12 → X = 2 13 ~ 18 → X = 3 … 따라서 X는 값이 H를 주기로 값이 1씩 증가한다. N이 1부터 시작하고 X도 1부터 시작하므로 다음의 공식이 만들어진다. X = (N - 1) // H + 1...

2024-09-15 · 1 min · 91 words

1018

편집 시간: 2022년 2월 7일 오후 8:30 코드 Algorithm/1018.py at main · Junroot/Algorithm 풀이 모든 경우를 탐색하면거 최소값을 구하면된다. 계산할 때, 제일 왼쪽위가 흰색인 경우와 검은색인 경우 두 가지로 나누어서 계산할 필요가 없다. 체스판의 크기가 64기 때문에 min(result, 64 - result) 로 구할 수 있다.

2024-09-15 · 1 min · 45 words

1012

편집 시간: 2022년 2월 9일 오후 6:44 코드 Algorithm/1012.py at main · Junroot/Algorithm 풀이 bfs또는 dfs로 인접한 배추들의 그룹의 개수를 구하면 된다.

2024-09-15 · 1 min · 22 words

1005

편집 시간: 2022년 3월 4일 오후 2:39 코드 Algorithm/1005.py at main · Junroot/Algorithm 풀이 내 풀이 건물 사이의 건축 선후 관계가 존재하기 때문에 위상 정렬을 사용하면 된다고 생각했다. 기본적으로 위상 정렬로 문제를 푸는데 다음 현재까지의 건축 시간을 자신보다 한 단계 앞의 건물 중에 가장 오래 걸린 건물을 기준으로 ㅅ계산을 해야되므로 이를 저장하는 리스트를 하나 만들었다.(dp) 마지막에 목적지 건물에 도착하면 (목적지 건물에 도착하는데 걸리는 시간) + (목적지 건물을 짓는데 걸리는 시간)을 출력하면 된다....

2024-09-15 · 1 min · 106 words

1003

편집 시간: 2022년 2월 9일 오후 6:13 코드 Algorithm/1003.py at main · Junroot/Algorithm 풀이 (n일 때 0의 개수) = (n-1일 때 0의 개수) + (n -2일 때 0의 개수) (n일 때 1의 개수) = (n-1일 때 1의 개수) + (n -2일 때 1의 개수) 위의 점화식을 찾아내면 풀 수 있다.

2024-09-15 · 1 min · 50 words

10-일일 빌드는 당신의 친구입니다

일일 빌드가 제공하는 장점 버그를 수정하고 나면, 테스터는 새 버전을 빠르게 얻어서 정말 해당 버그를 수정했는지 살펴보기 위해 다시 테스트 작업을 수행할 수 있다. 개발자는 테스트용 장비를 별도로 두지 않고서도 시스템의 버전 중 어느 버전도 망가뜨리지 않았다고 좀더 확신할 수 있다. 정기적인 일일 빌드 바로 직전에 변경을 체크인한 개발자는 어느 누구도 컴파일이 불가능한 상황을 만들어 버리지 않으리라는 사실을 안다. ‘빌드를 꺠버리는’ 어떤 파일을 체크인해 다른 사람을 방해하지 못한다. 미완성된 제품을 사용해야 하는 마케팅, 베타고객사이트와 같은 외부 그룹은 상당히 안정적으로 알려진 빌드를 구해서 잠시 동안 이를 사용해볼 수 있다....

2024-09-15 · 2 min · 245 words

10-실행 계획

MySQL 서버에서 보여주는 실행 계획을 읽고 이해하려면 MySQL 서버가 데이터를 처리하는 로직을 이해할 필요가 있다. 통계 정보 MySQL 서버는 5.7 버전까지 테이블과 인덱스에 대한 개괄적인 정보를 가지고 실행 계획을 수립했다. 하지만 이는 테이블 컬럼의 값이 실제로 어떻게 분포돼 있는지에 대한 정보가 없기 때문에 실행 계획의 정확도가 떨어지는 경우가 많았다. MySQL 8.0 버전부터는 인덱스되지 않는 컬럼들에 대해서도 데이터 분포도를 수집해 저장하는 히스토그램 정보가 도입됐다. 테이블 및 인덱스 통계 정보 비용 기반 최적화에서 가장 중요한 것은 통계 정보다....

2024-09-15 · 20 min · 4059 words

10-리액터 개요

애플리케이션 코드를 개발할 때는 명령형과 리액티브의 두 가지 형태로 코드를 작성할 수 있다. 명령형: 순차적으로 연속된 작업이 있으며, 각 작업은 한 번에 하나씩 그리고 이전 작업 다음에 실행된다. 리액티브: 데이터 처리를 위해 일련의 작업들이 정의되지만, 이 작업들은 병렬로 실행될 수 있다. 그리고 각작업은 부분 집합의 데이터를 처리할 수 있으며, 처리가 끝난 데이터를 다음 작업에 넘겨주고 다른 부분 집합의 데이터로 계속 작업할 수 있다. 리액티브 프로그래밍 이해하기 명령형 프로그래밍 한 번에 하나씩 만나는 순서대로 실행되는 명령어들로 코드를 작성 프로그램에서는 하나의 작업이 완전히 끝나기를 기다렸다가 그당므 작업을 수행한다....

2024-09-15 · 6 min · 1237 words