분류 전체보기 495

백준 17298 오큰수 파이썬 풀이 시간초과 해결

백준 17298 오큰수 파이썬 풀이 문제 크기가 N인 수열 A = A1, A2, ..., AN이 있다. 수열의 각 원소 Ai에 대해서 오큰수 NGE(i)를 구하려고 한다. Ai의 오큰수는 오른쪽에 있으면서 Ai보다 큰 수 중에서 가장 왼쪽에 있는 수를 의미한다. 그러한 수가 없는 경우에 오큰수는 -1이다. 예를 들어, A = [3, 5, 2, 7]인 경우 NGE(1) = 5, NGE(2) = 7, NGE(3) = 7, NGE(4) = -1이다. A = [9, 5, 4, 8]인 경우에는 NGE(1) = -1, NGE(2) = 8, NGE(3) = 8, NGE(4) = -1이다. 정답코드 #오큰수 N = int(input()) arr = list(map(int,input().split())) result =..

CS/알고리즘 2022.04.07

백준 4949 균형 잡힌 세상 파이썬 풀이

백준 4949 균형잡힌 세상 파이썬 풀이 문제 세계는 균형이 잘 잡혀있어야 한다. 양과 음, 빛과 어둠 그리고 왼쪽 괄호와 오른쪽 괄호처럼 말이다. 정민이의 임무는 어떤 문자열이 주어졌을 때, 괄호들의 균형이 잘 맞춰져 있는지 판단하는 프로그램을 짜는 것이다. 문자열에 포함되는 괄호는 소괄호("()") 와 대괄호("[]")로 2종류이고, 문자열이 균형을 이루는 조건은 아래와 같다. 모든 왼쪽 소괄호("(")는 오른쪽 소괄호(")")와만 짝을 이뤄야 한다. 모든 왼쪽 대괄호("[")는 오른쪽 대괄호("]")와만 짝을 이뤄야 한다. 모든 오른쪽 괄호들은 자신과 짝을 이룰 수 있는 왼쪽 괄호가 존재한다. 모든 괄호들의 짝은 1:1 매칭만 가능하다. 즉, 괄호 하나가 둘 이상의 괄호와 짝지어지지 않는다. 짝을 ..

CS/알고리즘 2022.04.05

객체지향의 원칙 OCP 와 DIP에 대해

객체지향의 원칙 OCP 와 DIP에 대해 *OCP 개방-폐쇄 원칙 소프트웨어 요소는 확장에는 열려있으나 변경에는 닫혀있어야 한다. 다형성을 통해 가능하다. 인터페이스를 구현한 새로운 클래스를 하나 만들어 새로운 기능을 구현 지금까지 배운 역할과 구현의 분리 DIP 의존관계 역전 원칙 프로그래머는 "추상화에 의존해야지, 구체화에 의존하면 안된다." 의존성 주입은 이 원칙을 따르는 방법 중 하나 구현 클래스에 의존하지 말고, 인터페이스에 의존하라는 뜻 역할에 의존하게 해야 한다는 것과 같다. 객체 세상도 클라이언트가 인터페이스에 의존해야 유연하게 구현체를 변경할 수 있다. 구현체에 의존하게 되면 변경이 아주 어려워진다. 공부는 인풋이 있으면 반드시 아웃풋이 있어야한다. 구체적인 코드를 구현해보며 알아보자. ..

Android fork (개인)에서 팀 브랜치로 pull & request 하는 방법

fork (개인)에서 팀 브랜치로 pull & request 하는 방법 에 대해 알아보겠습니다. Upstream으로 팀 브랜치와 연결하기 1. fork를 뜨면 본인의 깃허브에 브랜치가 하나 만들어지면서 다음과 같이 local 과 origin이 생깁니다. terminal에서 git remote add upstream 팀브런치주소를 입력하여 팀의 브랜치를 연동합니다. 연동하게 되면 다음 사진처럼 팀의 브런치가 연결됩니다. 팀브랜치에 Pull & Request 하는 방법 저는 현재 local의 release 브랜치에 있습니다. 1. 여기에 uptream 의 realease 브랜치를 pull 받아 팀 브랜치와 싱크를 맞춰줍니다. 2. 수정한 내 파트를 git add . / git add -A 를 해 트래킹을 할..

IT/git 사용법 2022.04.05

백준 1707번 이분 그래프 파이썬 풀이

백준 1707번 이분 그래프 파이썬 풀이 문제 그래프의 정점의 집합을 둘로 분할하여, 각 집합에 속한 정점끼리는 서로 인접하지 않도록 분할할 수 있을 때, 그러한 그래프를 특별히 이분 그래프 (Bipartite Graph) 라 부른다. 그래프가 입력으로 주어졌을 때, 이 그래프가 이분 그래프인지 아닌지 판별하는 프로그램을 작성하시오. 이분그래프란? 모든 꼭짓점을 빨강과 파랑으로 색칠하되, 모든 변이 빨강과 파랑 꼭짓점을 포함하도록 색칠할 수 있는 그래프 즉, 그래프의 모든 정점이 두 그룹으로 나눠지고 서로 다른 그룹의 정점이 간선으로 연결되어져 있는( 같은 그룹에 속한 정점끼리는 서로 인접하지 않도록 하는) 그래프를 이분 그래프라고 함. (청팀 백팀 같은 느낌??) 정답코드 #이분 그래프 import s..

CS/알고리즘 2022.04.04

백준 7562 나이트의 이동 파이썬 풀이

문제 체스판 위에 한 나이트가 놓여져 있다. 나이트가 한 번에 이동할 수 있는 칸은 아래 그림에 나와있다. 나이트가 이동하려고 하는 칸이 주어진다. 나이트는 몇 번 움직이면 이 칸으로 이동할 수 있을까? 정답코드 #나이트의 이동 from collections import deque T= int(input()) #시계방향으로 돌리면서 체크 dx = [-1,-2,-2,-1,1,2,2,1] dy = [-2,-1,1,2,2,1,-1,-2] def BFS(): queue = deque() x,y = present_location[0],present_location[1] queue.append([x,y]) chess_place[x][y] = 1 # for i in chess_place: # print(i) whil..

CS/알고리즘 2022.04.02

파이썬 1697번 숨바꼭질 파이썬 풀이

파이썬 1697번 숨바꼭질 파이썬 풀이 문제 수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일 때 걷는다면 1초 후에 X-1 또는 X+1로 이동하게 된다. 순간이동을 하는 경우에는 1초 후에 2*X의 위치로 이동하게 된다. 수빈이와 동생의 위치가 주어졌을 때, 수빈이가 동생을 찾을 수 있는 가장 빠른 시간이 몇 초 후인지 구하는 프로그램을 작성하시오. 풀이과정 첫 코드(시간초과) #숨바꼭질 from collections import deque N,K = map(int,input().split()) def DFS(): if(N == K..

CS/알고리즘 2022.04.01

파이썬 7569번 토마토 파이썬 풀이

파이썬 7569번 토마토 파이썬 풀이 문제 철수의 토마토 농장에서는 토마토를 보관하는 큰 창고를 가지고 있다. 토마토는 아래의 그림과 같이 격자모양 상자의 칸에 하나씩 넣은 다음, 상자들을 수직으로 쌓아 올려서 창고에 보관한다. 창고에 보관되는 토마토들 중에는 잘 익은 것도 있지만, 아직 익지 않은 토마토들도 있을 수 있다. 보관 후 하루가 지나면, 익은 토마토들의 인접한 곳에 있는 익지 않은 토마토들은 익은 토마토의 영향을 받아 익게 된다. 하나의 토마토에 인접한 곳은 위, 아래, 왼쪽, 오른쪽, 앞, 뒤 여섯 방향에 있는 토마토를 의미한다. 대각선 방향에 있는 토마토들에게는 영향을 주지 못하며, 토마토가 혼자 저절로 익는 경우는 없다고 가정한다. 철수는 창고에 보관된 토마토들이 며칠이 지나면 다 익게..

CS/알고리즘 2022.03.31

좋은 객체 지향 설계의 5가지 원칙(SOLID)

좋은 객체 지향 설계의 5가지 원칙(SOLID) SRP 단일 책임 원칙 한 클래스는 하나의 책임만 가져야 한다. 하나의 책임이란 것은 모호하다. 클 수 있고, 작을 수 있다. 문맥과 상황에 따라 다르다. 중요한 기준은 변경이다. 변경이 있을 때 파급 효과가 적으면 단일 책임 원칙을 잘 따른 것 ex) UI 변경, 객체의 생성과 사용 분리 책임의 개수가 많아질수록 한 책임의 기능 변화가 다른 책임에 주는 영향이 비례해서 증가합니다. 이는 결국 코드를 절차지향적으로 변하게 하여 유지 보수를 엉망으로 만듭니다. *OCP 개방-폐쇄 원칙 소프트웨어 요소는 확장에는 열려있으나 변경에는 닫혀있어야 한다. 다형성을 통해 가능하다. 인터페이스를 구현한 새로운 클래스를 하나 만들어 새로운 기능을 구현 지금까지 배운 역할..

카카오 코테 2020 Lv2 문자열 압축 파이썬 풀이

카카오 코테 2020 Lv2 문자열 압축 파이썬 풀이 https://programmers.co.kr/learn/courses/30/lessons/60057 코딩테스트 연습 - 문자열 압축 데이터 처리 전문가가 되고 싶은 "어피치"는 문자열을 압축하는 방법에 대해 공부를 하고 있습니다. 최근에 대량의 데이터 처리를 위한 간단한 비손실 압축 방법에 대해 공부를 하고 있는데, 문 programmers.co.kr 정답코드 #문자열 압축 def solution(s): answer = 1000 aliquot_list = [] answer_list = [] for i in range(1,len(s)//2 + 1): aliquot_list.append(i) #문자열이 1개일 때 예외처리 if(len(aliquot_li..

CS/알고리즘 2022.03.28