42860

날짜: 2022년 1월 31일 오후 5:50 코드 Algorithm/42860.py at main · Junroot/Algorithm 풀이 문제를 수평 이동과 수직 이동으로 크게 나눌 수 있다. 수직 이동 수직 이동에 대한 처리는 그렇게 어렵지 않다. 알파벳이 26개인것만 알고 있다면. 수평 이동 수평 이동에 대한 처리에서 놓쳐서는 안되는 경우가 있다. 오른쪽으로 이동했다가 왼쪽으로 쭉 이동하는 경우가 더 짧을 수도 있다 라는 점이다. 나는 이를 해결하기 위해 2가지 문제로 나눠서 풀었다. 그림으로 표현하면 다음과 같다. 모든 연속된 ‘A’ 구간 찾기 이 부분은 리스트를 처음부터 끝까지 한 번만 스캔해서 찾아냈다....

2024-09-15 · 1 min · 129 words

42842

날짜: 2022년 1월 31일 오후 5:51 코드 Algorithm/42842.py at main · Junroot/Algorithm 풀이 일단 내가 푼 방법은 문제에서 의도한 방법은 아닌 것으로 보인다. brown + yellow = (가로) * (세로) yellow = ((가로) - 2) * ((세로) - 2) 라는 식을 적어 놓은 뒤 이차방적식으로 문제를 풀면 O(1)으로 문제 풀이가 가능하다. 문제 의도인 완전 탐색으로 문제를 풀어도, 위 두 개의 식을 이용할 수 있을 것으로 보인다. def solution(brown, yellow): sum = brown + yellow for h in range(1, brown + yellow + 1): if sum % h == 0: w = sum // h if yellow == (w - 2) * (h - 2): return [w, h]

2024-09-15 · 1 min · 107 words

42840

날짜: 2022년 1월 31일 오후 5:51 코드 Algorithm/42840.py at main · Junroot/Algorithm 풀이 각 수포자의 점수 구하기 1등 수포자들 구하기 이렇게 2개의 소문제로 나눌 수 있다. 1번 문제는 약수를 이용하면 쉽게 점수를 구할 수 있다. 각 수포자들은 일정한 주기의 찍기 패턴을 가지고 있다. 1번 수포자는 주기가 5, 2번 수포자는 8, 3번 수포자는 10이다. (문제 번호) % (수포자의 패턴 주기)를 하면 수포자가 패턴의 몇 번째를 사용했는지 파악할 수 있게된다. 2번 문제는 먼저 최대 점수를 구하고 최대 점수에 해당하는 사람들을 전부 찾는 방식으로 구현했다....

2024-09-15 · 1 min · 82 words

42839

날짜: 2022년 1월 31일 오후 5:51 코드 Algorithm/42839.py at main · Junroot/Algorithm 풀이 종이 조각으로 만들 수 있는 모든 수 구하기 만들어진 수 중에 가장 큰 수 이하의 모든 소수 구하기 소수 리스트에 만들어진 수가 포함된 것의 개수 구하기 이렇게 3가지 소문제로 나눴다. 이렇게 접근한 이유는 숫자마다 소수인지 검증하는 과정을 매번 계산하는 것이 비효율적이라고 생각했기 때문이다. 1번 문제의 경우 파이썬의 itertools라는 모듈에 permutations 함수를 사용해도되지만 이번에는 모든 순열을 구하는 함수를 직접 구해봤다....

2024-09-15 · 2 min · 259 words

42748

날짜: 2022년 1월 31일 오후 5:51 코드 https://www.notion.so 풀이 복잡한 로직이 없어서 쉽게 풀 수 있다. 인덱스 i-1부터 j-1까지 리스트를 자른 다음 정렬하고, k-1번째 인덱스의 값을 찾으면 된다. 문제에서 i, j, k를 1번부터 세는 것에 유의해야된다.

2024-09-15 · 1 min · 36 words

42747

날짜: 2022년 1월 31일 오후 5:51 코드 Algorithm/42747.py at main · Junroot/Algorithm 풀이 발표한 논문의 수가 1000편이하기 때문에, h=1000부터 하나씩 내려오면서 가능한지 확인해도 처리속도가 빠를 것이라고 생각이 들었다. 이 때, h값을 하나씩 줄이면서 전 단계에서 세었던 논문의 개수를 다시 셀 필요가 없을 것으로 보였다. citations를 역순으로 정렬한 뒤, h를 1씩 줄이고 h값을 만족하는 논문의 수가 h값 이상 인 경우에 그 h를 반환하도록 구현했다. 다른 사람의 풀이를 봤는데 너무 충격적이여서 여기에도 남겨본다....

2024-09-15 · 1 min · 125 words

42746

날짜: 2022년 1월 31일 오후 5:51 코드 Algorithm/42746.py at main · Junroot/Algorithm 풀이 두 수 a,b가 있을 때, a*(10^len(b)) + a > b*(10^len(a)) + a이면 최대값은 항상 a가 b보다 먼저 온다는 것을 증명할 필요가 있다. 따라서, a와 b를 이어붙이고 뒤집어본 다음 더 큰 경우의 순서대로 수가 나열되면 가장 큰 값이 나온다는 뜻이다.

2024-09-15 · 1 min · 52 words

418 I'm a teapot

서버가 찻주전자이기 때문에 커피 내리기를 거절했다는 것을 의미한다. 이 오류는 1998년 만우절 농담이었던 하이퍼 텍스트 커피 포트 제어 규약(Hyper Text Coffee Pot Control Protocol)의 레퍼런스다.

2024-09-15 · 1 min · 25 words

4153

편집 시간: 2022년 2월 7일 오후 8:37 코드 Algorithm/4153.py at main · Junroot/Algorithm 풀이 딱히 생각할 필요없이 피타고라스 정리로 비교하면 된다.

2024-09-15 · 1 min · 21 words

414 URI Too Large 해결

문제 상황 GET 요청에 query가 길어지면서, URI가 길어지니 Nginx에서 414 URI Too Large가 발생했다. 원인 분석 Nginx에는 large_client_header_buffers number size 설정값이 존재한다. 요청 헤더를 읽을 때 사용할 버퍼의 개수와 크기를 설정한다. request line이 버퍼 하나의 크기를 초과하면 414 응답이 발생한다. requet line: 요청 메시지의 첫번 째 줄 예시: GET /software/htp/cics/index.html HTTP/1.1 요청 헤더가 버퍼 하나 크기를 초과하면 400 응답이 발생한다. 기본값은 number=4, size=8k 다. 해결 방법 large_client_header_buffers 설정 값을 조절하여 해결한다....

2024-09-15 · 1 min · 97 words

4-클래스, 객체, 인터페이스

클래스 계층 정의 코틀린 인터페이스 코틀린 인터페이스는 자바 8 인터페이스와 비슷하다. 상위 클래스나 상위 인터페이스에 있는 프로퍼티나 메소드를 오버라이드할 때는 override 변경자를 붙여줘야 된다. 실수로 상위 클래스의 메소드를 오버라이드하는 경우를 방지해준다. 한 클래스에서 두 인터페이스를 함께 구현했을 때, 같은 디폴트 메소드가 있다면 컴파일 오류가 발생한다. 이 경우는 하위 클래스에 직접 구현하게 강제한다. 상위 타입의 메소드 호출하는 방식은 아래를 참고한다. class Button : Clickable, Focusable { override fun click() { println("I was Clicked") } override fun showOff() { super<Clickable>....

2024-09-15 · 8 min · 1668 words

4-컴포넌트 원칙

컴포넌트 컴포넌트: 시스템의 구성 요소로 배포할 수 있는 가장 작은 단위. 자바의 jar, 루비의 gem, 닷넷의 DLL… 여러 컴포넌트를 서로 링크하여 실행 가능한 단일 파일로 생성할 수 있다. 또는, 여러 컴포넌트를 서로 묶어서 .war 파일과 같은 단일 아카이브로 만들 수도 있따. 또는 컴포넌트 각각을 .jar나 .dll같이 독적으로 로드할 수 있는 플러그인이나 .exe 파일로 만들어서 독립적으로 배포할 수도 있다. 컴포넌트의 간략한 역사 소프트웨어 개발 초창기에는 메모리에서의 프로그램 위치와 레이아웃을 프로그래머가 직접 제어했다....

2024-09-15 · 6 min · 1225 words

4-추상화 설계

추상화: 복잡한 자료, 모듈, 시스템 등으로부터 핵심적인 개념 또는 기능을 간추려 내는 것 복잡성을 숨기기 위해 사용되는 단순한 형식 객체는 여러 형태로 추상화해서 표현할 수 있다. 추상화를 하려면 객체에서 무엇을 감추고 무엇을 노출해야 하는지 결정해야 한다. 프로그래밍에서는 다음과 같은 목적으로 추상화를 사용한다. 복잡성을 숨기기 위해 코드를 체계화하기 위해 만드는 사람에게 변화의 자유를 주기 위해 함수 내부의 추상화 레벨을 통일하라 계층이 잘 분리되었을 때 장점 어떤 계층에서 작업할 때 그 아래의 계층은 이미 완성되어 있으므로, 해당 계층만 생각하면 된다....

2024-09-15 · 6 min · 1228 words

4-처리율 제한 장치의 설계

API에 처리율 제한을 두면 좋은점 DoS 공격에 의한 자원 고갈을 방지할 수 있다. 비용을 절감할 수 있다. 서버 과부하를 막는다. 1단계 문제 이해 및 설계 범위 확정 면접관과 소통하면서 어떤 제한 장치를 구현해야 하는지 분명히 한다. 예시: 설정된 처리율을 초과하는 요청은 정확하게 제한한다. 낮은 응답 시간 가능한 한 적은 메모리를 써야 한다. 분산형 처리율 제한: 하나의 처리율 제한 장치를 여러 서버나 프로세스에서 공유할 수 있어야 한다. 예외 처리: 요청이 제한되었을 때는 그 사실을 사용자에게 분명하게 보여주어야 한다....

2024-09-15 · 5 min · 971 words

4-좋은 단위 테스트의 4대 요소

좋은 단위 테스트 스위트의 특성 개발 주기에 통합돼 있다. 코드베이스의 가장 중요한 부분만을 대상으로 한다. 최소한의 유지비로 최대 가치를 끌어낸다. 가치있는 테스트를 작성하려면 가치있는 테스트를 식별할 수 있어야 한다. 좋은 단위 테스트의 4대 요소 자세히 살펴보기 좋은 단위 테스트 네 가지 특성 회귀 방지 리팩터링 내성 빠른 피드백 유지 보수성 첫 번째 요소: 회귀 방지 회귀: 코드를 수정한 후 기능이 의도한 대로 작동하지 않는 경우 회귀 방지 지표에 대한 테스트 점수가 얼마나 잘 나오는지 평가하려면 다음 사항을 고려해야 한다....

2024-09-15 · 5 min · 971 words

4-접근 패턴

접근 패턴: 애플리케이션이 MySQL을 사용하여 데이터에 접근하는 방법이다. 접근 패턴을 변경하면 MySQL 성능에 큰 영향을 미치지만, 일반적으로 다른 최적화보다 더 많은 노력이 필요하다. MySQL 성능은 애플리케이션이 MySQL을 어떻게 사용하냐에 의해 제한되는 것이지 그 반대는 아니다. MySQL은 아무것도 하지 않는다 애플리케이션이 유휴 상태일 때는 MySQL은 유휴 상태이고, 애플리케이션이 바쁘게 쿼리를 실행 중이면 MySQL도 바쁘게 해당 쿼리를 실행 중이다. MySQL에는 “페이지 플러싱” 같은 몇 가지 백그라운드 작업이 있지만, 실제로 백그라운드 작업은 쿼리를 실행하는 포그라운드 작업을 허용하여 느린 작업을 지연 작업을 지연하거나 방지함으로써 성능을 향상시킨다....

2024-09-15 · 1 min · 170 words

4-스프링 시큐리티

스프링 시큐리티 활성화하기 Spring 자동 구성을 이용하여 활성화한다. https://www.baeldung.com/spring-boot-security-autoconfiguration 아래 의존에는 SecurityAutoConfiguration 클래스가 포함되어 있어서, 자동으로 시큐리티 구성이 된다. <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency> Spring 자동 구성은 다음과 같이 구성된다. 모든 HTTP 요청 경로는 인증되어야 한다. 어떤 특정 역할이나 권한이 없다. 스프링 시큐리티의 기본 HTTP 기본 인증을 사용해서 인증된다. 사용자는 하나만 있으며, 이름은 user다. 비밀번호는 암호화해 준다. 시큐리티가 활성화되면 기본적으로 설정되는 프로퍼티가 있다. spring.security.user.name spring.security.user.password 따로 설정하지 않았으면 비밀번호가 랜덤으로 생성되면 콘솔 로그에 출력된다....

2024-09-15 · 5 min · 895 words

4-데이터 링크 계층 랜에서 데이터 전송하기

데이터 링크 계층이 역할과 이더넷 데이터 링크 게층은 네트워크 장비 간에 신호를 주고받는 규칙을 정하는 계층이다. LAN에서 데이터를 정상적으로 주고받기 위해서 데이터 링크 계층에 이더넷을 주로 사용한다. 이더넷에 목적지 정보(MAC주소)를 추가해서 자신의 데이터가 아니면 무시하도록 설계되어있다. 이더넷은 여러 컴퓨터가 동시에 데이터를 전송해도 충돌이 일어나지 않는 구조로 되어있다. 동시에 케이블이 지나가면 충돌하기 때문에 데이터를 보내는 시점을 늦추는 방법을 사용한다. 이를 CSMA/CD(Carrier Sense Multiple Access with Collision Detection)라고 부른다. CS: 데이터를 보내려고 하는 컴퓨터가 케이블에 신호가 흐르고 있는지 확인한다....

2024-09-15 · 3 min · 487 words

4-개발자가 꼭 알아둬야 할 유니코드와 문자 집합에 대한 고찰

ASCII 7비트로 영문자만 처리하는 문자 인코딩 대다수 컴퓨터가 8비트인 바이트 단위를 사용하므로, ASCII 문자를 저장하고 비트를 하나 더 확보할 수 있었다. 워드스타에서는 32미만인 코드는 인쇄 제어 목적으로 사용했다. IBM PC는 OEM 문자집합을 고안했는데, 이는 유럽 언어를 위한 몇몇 강조문자와 선그리기 문자를 사용할 수 있었다. 하지만 미국 이외의 지역에서 PC를 판매하기 시작하면서 온갖 OEM 문자 집합 형식이 나오기시작했으며, 각자 요오에 맞춰 128글자를 정의했따. ANSI 표준 위원회에서느 ANSI 표준을 체계적으로 정리함에 따라 OEM 난투극이 끝났다....

2024-09-15 · 2 min · 327 words

4-CPU 스케줄링

스케줄링의 개요 스케줄링의 단계 CPU 스케줄러: 여러 프로세스의 상황을 고려하여 CPU와 시스템 자원을 어떻게 배정할지 결정하는 일을 한다. 고수준 스케줄링 장기 스케줄링, 작업 스케줄링이라고도 한다. 전체 시스템의 부하를 고려하여 작업을 시작할지 말지를 결정한다. 이 결정에 따라 시스템의 전체 프로세스 수가 결정되는데 이를 멀티프로그래밍 정도(degree of multiprogramming)라고한다. 중간 수준 스케줄링 시스템에 과부하가 걸려서 전체 프로세스 수를 조절해야 한다면 이미 활성화된 프로세스 중 일부를 보류 상태로 보낸다. 저수준 스케줄링 어떤 프로세스에 CPU를 할당할지, 어떤 프로세스를 대기 상태로 보낼지 등을 결정한다....

2024-09-15 · 10 min · 2055 words