목록전체 글 (102)
영호
문제 설명 인프런 파이썬 알고리즘 문제풀이(코딩 테스트 대비) 파이썬 알고리즘 문제풀이 (코딩테스트 대비) - 인프런 | 강의 파이썬을 이용한 코딩테스트 문제풀이를 합니다., - 강의 소개 | 인프런... www.inflearn.com 학생들의 시험 점수가 주어지면 학생들의 평균을 구하고, 평균과 점수 차가 가장 적은 학생의 번호를 구하라. 이때 점수 차가 같다면 높은 점수의 학생 번호가 정답이고, 점수차와 점수 모두 같을 경우 학생 번호가 빠른 학생이 정답이다. 출력 : 평균 학생 번호 나의 풀이 round()를 이용해 소수 첫째 자리에서 반올림해 학생들의 평균을 구합니다. 평균 점수 - 첫 학생의 점수를 min 변수에 할당한 뒤, 두 번째 학생 점수와 평균 점수의 차를 min과 비교합니다. min >..
ISP(인터페이스 분리 원칙)이란 "클라이언트는 자신이 사용하지 않는 기능에 의존하게 해선 안된다." 즉, 모든 클라리언트를 위한 범용적인 인터페이스 보단, 특정 클라이언트에 맞게 여러 인터페이스로 분리하는 것이 좋다는 뜻입니다. SRP와 비슷한 맥락입니다. SRP는 각 클래스들이 하나의 책임을 가지게 해서 유지보수성을 높였다면, ISP는 인터페이스들이 단일 책임을 가지도록 하는 원칙입니다. 예시 자동차를 개발하기 위해 Car인터페이스를 만들었습니다. 그런데 자동차에는 수동, 자동 2종류가 있다고 가정합니다. Car라는 범용적인 인터페이스를 사용하게 된다면, autoHandle(), manualHandle() 이렇게 2가지의 메서드가 포함되어야 할 것입니다. 이제 해당 인터페이스를 구현하는 클래스를 생각..
문제 링크 https://www.acmicpc.net/problem/1080 1080번: 행렬 첫째 줄에 행렬의 크기 N M이 주어진다. N과 M은 50보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에는 행렬 A가 주어지고, 그 다음줄부터 N개의 줄에는 행렬 B가 주어진다. www.acmicpc.net 나의 풀이 처음 잘못된 접근 문제에서 행렬을 변환하는 연산은 어떤 3 × 3 크기의 부분 행렬에 있는 모든 원소를 뒤집는 것이다. (0 → 1, 1 → 0) 이 부분을 읽지 못해 DFS로 접근하려는 생각을 했습니다. 위 조건 때문에 DFS로 접근하는 것은 잘못된 접근입니다. Greedy를 이용한 접근 정말 간단하게 행렬을 탐색하며 비교하는 행렬과 다르면 해당 위치를 기준으로 3X3 만큼 뒤집어 주면 ..
문제 설명 인프런 파이썬 알고리즘 문제풀이(코딩 테스트 대비) 파이썬 알고리즘 문제풀이 (코딩테스트 대비) - 인프런 | 강의 파이썬을 이용한 코딩테스트 문제풀이를 합니다., - 강의 소개 | 인프런... www.inflearn.com 1 ~ 100 사이의 자연수 카드 N장 중 3장을 뽑아 합한 수 들 중 K번째로 큰 수를 출력하는 문제입니다. 나의 풀이 3장을 뽑을 때 각 카드들의 순서는 중요하지 않기 때문에 itertools의 combination을 사용해 풀었습니다. combination을 잘 모르시면 이 글을 참고해주세요. 중복 제거를 위해 set자료형을 사용했습니다. Code import sys from itertools import combinations # sys.stdin=open("inp..
LSP(리스코프 치환 원칙)이란 SOLID에서 L에 해당하는 원칙으로, "상위 타입의 객체를 하위 타입의 객체로 치환을 해도 프로그램은 정상적으로 동작을 해야 한다."라는 내용입니다. 역시 코드를 보며 추가적으로 알아보겠습니다. 예시는 흔히 찾아볼 수 있는 직사각형, 정사각형 예시를 이용하겠습니다. Code 직사각형 (Rectangle) package lsp; public class Rectangle { private int height; private int width; public int getHeight() { return height; } public void setHeight(int height) { this.height = height; } public int getWidth() { retur..
들어가며 itertools 모듈의 조합, 순열(combinations와 permutations)에 대해 알아보겠습니다. 조합(combinations) 반복 가능한 객체에 대해 n개의 원소를 뽑아줍니다. 뽑힌 n개의 원소들의 순서는 상관하지 않습니다. 무엇을 뽑았는지를 중요하게 여깁니다. ex) [1,2,3]과 [2,3,1]은 같은 경우입니다. combinations객체를 반환합니다. 사용법 combinations(iterable, n) from itertools import combinations combination_data = [1, 2, 3, 4] print(combinations(combination_data,2)) # print(list(combinations(combination_data,2)..
에러 로그 Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running? 해결방법 Docker 명령어를 수행하려는데 위와 같은 에러 메시지가 출력된다면 docker.sock에 있는 docker daemon에 연결할 수 없어서 Docker명령어를 수행할 수 없는 상태입니다. docker.sock에서 기본적으로 unix socket을 사용해 docker daemon에서 요청된 docker명령어를 처리하게 됩니다. 이러한 docker daemon에 연결할 수 없는 상태입니다. docker.sock에서 docker 명령어를 docker daemon에 보내는 방법은 unix socket 말고 tcp, ..
들어가며 이번 글에서는 알고리즘 풀이 중 사용할 수 있는 문자열을 뒤집는 2가지의 방법에 대해 기록해보겠습니다. reverse() s[::-1] 반복문을 이용한 방법은 생략하겠습니다. reverse() 간단하게 리스트를 지정해 reverse()를 호출해주면 됩니다. 문자열에는 reverse()가 동작하지 않기 때문에 list()를 이용해 변환 후 reverse()를 호출해야 합니다. reverse_test = list("hi hello") print(reverse_test) reverse_test.reverse() print(reverse_test) ['h', 'i', ' ', 'h', 'e', 'l', 'l', 'o'] ['o', 'l', 'l', 'e', 'h', ' ', 'i', 'h'] s[::-..