전체 글 562

[1309] 동물원 in python

다이나믹 프로그래밍 문제! 경우의 수를 따져서 출력해야 하는데 n=1, n=2까지 직접 경우의 수를 따져보며 규칙을 발견하며 푸는 방식 n=0일땐 1 사자가 하나도 배치가 되어있지 않은 경우의 수도 하나의 경우로 친다고 했으므로. n=1일땐 3 oo, xo, ox 총 3가지 n=2일땐 7 1) n번째 줄이 모두 비어있는 상태 (oo) n=1 oo. xo. ox n=2 oo oo. oo -> 3가지 dp[n-1] * 1 : n번째 줄에는 oo 하나의 경우만 존재하고 있으므로 1를 곱하는 것 2) n-1번째 줄이 모두 비어있는 경우 (oo) n=1 oo. oo n=2 xo ox -> 2가지 dp[n-2] * 2 3) n-1, n번째 줄이 모두 채워져 있는 경우 (ox , xo) dp[n-1]-dp[n-2] ..

[2644] 촌수 계산하기 in python

 dfs, bfs 두 방식 모두 풀 수 있었던 문제! 처음엔 dfs를 총 2번 돌려서 촌수를 더하는 방식으로 계산하려고 했으나 너무 비효율적인 것 같아서 패쓰.. 이 촌수 그래프는 무방향 그래프이니까 array[자식]=부모 array[부모]=자식 이런식으로 양쪽의 값을 각각 넣어줘야한다. import sys sys.setrecursionlimit(300000) n=int(input()) yeon,kim=map(int,input().split()) m=int(input()) array=[[] for _ in range(n+1)] visited=[0 for _ in range(n+1)] for _ in range(m): p,c=map(int,input().split()) array[p].append(c) ..

[10451] 순열 사이클 in python

처음엔 dfs 를 떠올리지 않고 반복문만으로 해결하려고 했으나,, 하다보니 재귀로 하는 게 더 편할 것 같아서 노선 변경!! 런타임 에러가 나서 sys.setrecursionlimit(2000)으로 최대 재귀를 늘려주었더니 해결! dfs 를 이용해서 문제를 풀어주었음! visited는 방문한 노드의 리스트를 저장해두는 리스트 circle은 현재 서클에 해당하는 리스트 import sys sys.setrecursionlimit(2000) for _ in range(int(input())): n = int(input()) array = list(map(int, input().split())) array.insert(0,0) visited = set() answer = 0 idx = 1 def dfs(node..

[2512] 예산 in python [이분탐색]

전형적인 이분 탐색 문제! 오랜만에 풀었던 탓인지 이분 탐색 구현하는 데 있어서 사알짝 버벅..버벅..거렸다.. (열심히 하자..) 모든 요청이 배정될 수 있는 경우에는 요청한 금액을 그대로 배정한다. 모든 요청이 배정될 수 없는 경우에는 특정한 정수 상한액을 계산하여 그 이상인 예산요청에는 모두 상한액을 배정한다. 상한액 이하의 예산요청에 대해서는 요청한 금액을 그대로 배정한다. 여러번의 실패를 경험한 가장 중대했던 이유 start의 초기값을 0으로 설정해뒀기 때문 ^^ 다시 정리해두자! (1) 초기값 설정 - start=0 - end=max(리스트) (2) 반복문 조건 설정 while start

[1057] 토너먼트 in python

라운드 참가자가 홀수라면? -> 마지막 번호 참가자는 자동 진출 라운드 변경시마다 참가자의 번호 재배치 이때 순서는 처음 번호의 순서를 그대로 유지하면서 1번부터 매긴다. 한명만 남을때까지 라운드를 진행한다 * (조건) * 참고로 토너먼트가 한 경기마다 한 팀이 탈락하고 승리한 팀만 다음 라운드로 진출하는 원리이다. 김지민과 임한수는 항상 이긴다! 16 8 9 를 예시로 들어보면! 8과 9, 즉 김지민과 임한수는 항상 이긴다고 가정한다. 그러면 첫번째 라운드에서 김지민은 8번째 -> 4번째로 이동되고 임한수는 9번째 -> 5번째로 이동된다. (물론 다른 숫자들은 임의로 이동시킴, 결과에 영향이 없으므로 왜냐? 어차피 김지민과 임한수만 남을거니까) 위 과정을 쭉 하면 김지민과 임한수만 남게 된다. 김지민 ..

Redownload Unavailable with This Apple ID 오류 해결

brew, mas 설치를 모두 하고 드디어 kakaoTalk을 깔려고 mas install (kakaotalk ID)를 입력해줬더니 이렇게 오류가 떠!버!렸!다! 이걸로 한참 헤매고 있을 무렵.. 갑자기 이런 알림이 떴다 Redownload Unavailable with This Apple ID. This redownload is not available for this Apple ID either because it was bought by a different user or the item was refunded or cancelled. 음 대충 읽어보니 이 애플 아이디로는 다시 재다운을 할 수 없다는 뜻 같다. 다른 유저에 의해 이미 구입했었거나 또는 환불이나 취소를 했거나...? 하지만 나는 그런..

[맥북프로 개발자 초기세팅 Part1] Homebrew 설치, Java 11 설치

https://brew.sh/index_ko Homebrew The Missing Package Manager for macOS (or Linux). brew.sh Homebrew 홈페이지에 나와있는 명령어들을 그대로 복사하여 터미널에 붙여넣기 했다. zsh: command not found: brew 그러나 brew가 설치되어 있지 않다는 메세지가 떴다..! 오잉 이것은 어떻게 된건가..했는데 내가 쓰고 있는 맥북은 m1 맥북 프로라서 공식 사이트에서 제공해주는 걸로 설치하게 되면 이전과 달리 경로가 설정되기 때문에 약간의 수정이 필요하다고 .. 원래는 /user/local가 homebrew의 기본 디렉토리였으나 /opt/homebrew로 변경되었다! 터미널을 다시 열어서 아래에 나와있는 걸 복붙해주면..

[스프링부트] 객체 지향 설계와 스프링

- 다형성 + OCP, DIP를 가능하게 지원해준다. - DI 컨테이너 제공 - 클라이언트의 코드 변경 없이 기능을 확장할 수 있다. - 쉽게 부품 교체하듯이 개발할 수 있다. 모든 설계에 역할과 구현을 분리하자! - 인터페이스를 도입하면 추상화라는 비용이 발생한다. - 기능 확장 가능성이 없다면 구체 클래스를 사용하고, 향후 필요할 때 리팩터링해서 인터페이스를 도입하는 방법이 있다. 객체지향 책 추천 : 객체지향의 사실과 오해 스프링 책 추천 : 토비의 스프링 JPA 책 추천 : 자바 ORM 표준 JPA 프로그래밍 출처 https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%ED%95%B5%EC%8B%AC-%EC%9B..

[스프링부트] 객체 지향 설계 SOLID 원칙

> : 클린코드로 유명한 로버트 마틴이 좋은 객체 지향 설계의 5가지 원칙을 정리! (1) SRP (Single Responsibility Principle) : 단일 책임 원칙 - 한 클래스는 하나의 책임만을 가져야한다. - 중요한 기준은 변경이다. 변경이 있을 때 파급 효과가 적으면? 단일 책임 원칙을 잘 따른 것! ex) UI 변경, 객체의 생성과 사용을 분리 (2) OCP (Open/Closed Principle) : 개방-폐쇄 원칙 *** - 소프트웨어 요소는 확장에는 열려 있으나 변경에는 닫혀있여야한다. - 다형성을 활용 - 인터페이스를 구현한 새로운 클래스를 하나 만들어서 새로운 기능을 구현 - 지금까지 배운 역할과 구현의 분리를 생각해보자 - 객체를 생성하고, 연관관계를 맺어주는 별도의 조..

[Java] 객체 지향 프로그램, 객체 지향 특징 (+오버라이딩 및 오버로딩)

목차 1. 클래스 : 객체를 정의해놓은 것으로 객체를 생성할 때 사용한다. 즉 객체의 설계도를 의미한다. 2. 객체 : 객체의 사전적인 정의는 "실제로 존재하는 것"이다. 프로그래밍에서의 객체는 클래스에 정의된 내용처럼 클래스를 데이터 타입으로 메모리에 생성된 것을 의미한다. - 객체의 구성요소 객체는 속성과 기능, 두 종류의 구성 요소로 이루어져있다. 객체는 다수의 속성, 기능으로 이루어져있어서 속성과 기능의 집합이라고 할 수 있다. 속성 == 멤버변수 기능 == 메서드 인스턴스와 객체는 같은 의미이지만 문맥에 따라 사용된다. 책상은 객체다. 책상 클래스의 인스턴스는 책상이다. 인스턴스화 : 클래스로부터 객체를 만드는 과정을 의미한다. 어떤 클래스로부터 만들..

[스프링부트] Spring의 역사, 생태계, Spring의 개념

Spring : EJB라는 겨울을 넘어 새로운 시작이라는 뜻! EJB의 단점 1. 테스트가 어렵다. : EJB 외부에서 실행하는 것이 어려웠기에 컨테이너에 배포를 해야만 했다. 그러나 스프링 프레임워크는 의존성 주입이라는 개념을 도입하여 테스트 과정을 간소화할 수 있게 되었다. 테스트 과정을 간소화하게 되면 얻게 되는 이점은? > 생산성이 향상된다. > 빠른 결함을 발견하게 되고 이로 인해 수정 비용이 적게 들어간다. > 지속적인 통합 시 자동화된 단위 테스트로 향후 결함을 예방한다. 의존성 주입 (DI : Dependency Injection) >> 의존 객체를 생성하지 않고 주입 받아 사용한다. new 연산자를 이용해 객체를 생성하는 것 - 배포과정이 불편하다. - 불필요한 메서드를 구현해야 한다. ..

[n11899] 괄호 끼워넣기 in python

HTML 삽입 미리보기할 수 없는 소스 array=list(input()) stack=[] answer=0 for i in range(len(array)): if array[i]=='(': stack.append("(") continue if len(stack)!=0 and stack[-1]=="(": stack.pop() else: answer+=1 print(answer+len(stack)) 스택의 성질을 이용하여 푼 문제! ( 괄호면 stack에 넣고 ) 괄호면 짝이 있는지 없는지 stack을 살펴봐야한다. 짝이 없으면 answer+=1 있으면 stack.pop()

[n1531] 투명 in python

왼쪽 아래 모서리, 오른쪽 위 모서리 좌표라고 해서 오른쪽 위 모서리 y좌표의 값이 왼쪽 아래 모서리 y좌표의 값보다 항상 작은 줄 알았으나 그게 아니었다! x,y 그래프를 생각했어야했다 n, m = map(int, input().split()) array = [[0 for _ in range(101)] for _ in range(101)] for _ in range(n): x1, y1, x2, y2 = map(int, input().split()) # 왼쪽 아래 모서리, 오른쪽 위 모서리 좌표 for i in range(y1, y2 + 1): for j in range(x1, x2 + 1): array[j][i] += 1 answer = 0 for i in range(101): for j in rang..

카테고리 없음 2021.11.25

[n1822] 차집합 in python

set() 말고 list로 해서 시간초과가 났었지만 해결! 실행시간은 약 1000ms a,b=map(int,input().split()) aArray=set(list(map(int,input().split()))) bArray=set(list(map(int,input().split()))) temp=set() for i in aArray: if i not in bArray: temp.add(i) print(len(temp)) print(*sorted(temp)) - 연산자를 이용하면 차집합 결과를 쉽게 도출해낼 수 있었다...! 띠용 a,b=map(int,input().split()) aArray=set(list(map(int,input().split()))) bArray=set(list(map(int,..

[n1755] 숫자 놀이 in python

sorted, lambda, dictionary를 이용해서 풀 수 있었던 정렬 및 문자열 문제! 리스트에 숫자와 문자를 같이 넣어주는 생각을 바로 떠올리지 못했음! m, n = map(int, input().split()) dic = {'1': 'one', '2': 'two', '3': 'three', '4': 'four', '5': 'five', '6': 'six', '7': 'seven', '8': 'eight', '9': 'nine', '0': 'zero'} temp = [] answer = [] for i in range(m, n + 1): answer.append([i, ''.join(dic[k] for k in str(i))]) answer.sort(key=lambda x:x[1]) for i..

[n12760] 최후의 승자는 누구? in python

단순 구현문제! 가장 큰 수를 가진 플레이어가 여러명일 수 있다는 조건을 빼먹고 구현하다가 시간을 많이 버린 문제; n, m = map(int, input().split()) array = [] for i in range(n): temp = sorted(list(map(int, input().split()))) array.append(temp) answer = [0 for _ in range(n)] for i in range(m): temp = [] for j in range(n): temp.append(array[j][i]) maxnum = max(temp) for j in range(n): if maxnum == temp[j]: answer[j] += 1 player = max(answer) resu..

[n16935] 배열 돌리기 3 in python

전형적인 구현 문제! 3번 , 4번 연산에서 연산 후 바뀐 행과 열의 값을 바꿔주지 않아서 오류가 났었다! 1,2번 연산에서는 단순히 상하좌우 대칭만 하는거라 굳이 이 과정이 필요 없다 하지만 회전하는 부분에서는 이 과정이 필수 +_+ def func(num): global array, n,m # 1번 연산 -> 배열을 상하반전 if num == 1: temp = [] for i in range(n): temp.append(array[n - 1 - i]) array = temp del temp return # 2번 연산 -> 배열 좌우반전 if num == 2: temp = [] for i in range(n): temp.append(array[i][::-1]) array = temp del temp r..

[n15965] k번째 소수 in python

무작정 for문을 돌리게 되면 시간초과가 날 것 같았다. 그래서 에라토스테네스의체를 이용하여 문제를 풀었다. 에라토스테네스의 체에 대한 이해 먼저 해야하는데 https://wikidocs.net/21638 2. 소수 구하기 - 에라토스테네스의 체 # 소수 : 1과 그 수 자신 이외의 자연수로는 나눌 수 없는 자연수이다. # 코딩 소수인지 검사하는 함수(isPrime)를 만든다. 1부터 100 사이의 소수를 구하는 ... wikidocs.net 위 링크를 참고하면 좋을 것 같다. 리스트를 하나 생성한다. 그리고 2부터 시작해서 2의 배수는 모두 지우고 3의 배수 모두 지우고 5의 배수 모두 지우고 ... 이런식으로 소수의 배수들을 모두 지워준다. k = int(input()) array = [1 for _..

카테고리 없음 2021.11.09

[n8394] 악수 in python

예제문제를 보다보니 점화식이 보였다 n=1일땐 1 n=2일땐 2 n=3일땐 3(1+2) n=4일땐 5 (2+3) n=5일땐 8 (3+5) 수가 매우 커질 수 있기 때문에, 마지막 자리만 출력한다. > dp[-1]%10을 해줘야 올바른 출력값이 나오게 된다. n = int(input()) dp = [0 for _ in range(n + 1)] dp[1] = 1 dp[2] = 2 for i in range(3, n + 1): dp[i] = dp[i - 1] % 10 + dp[i - 2] % 10 print(dp[-1]%10) 시간이 오래 걸려서 더 좋은 코드를 찾아보았다. dp 배열을 쓰지 않아도 변수 2개로 충분히 구할 수 있었다. (스왑) 그리고 %60을 왜 써주는 지 아직 잘 모르겠지만.. 좀 더 연구..

[n9742] 순열 in python

재귀함수 너무 어렵다 ㅠㅠ.. 매번 풀어도 헷갈리고 적응 안되는 것들 중 하나가 재귀함수 :( 너무 지저분하게 코드를 짠 것 같아서 좀 더 고민해보고 찾아봐야겠다 ㅠㅠ 일단은 for문 안에서 1차적으로 첫번째 숫자를 고른 뒤 permu 함수를 실행한다. permu 함수 내에서 for문을 또 따로 돌려주고 그 안에서 재귀함수를 호출하여 순열을 찾아나가면 된다. 만약 현재 값이 입력값과 개수가 똑같고 answer_num이 n과 같다면? 답을 찾은것이다! answer_num = 0 answer = '' def permu(n, cnt): global answer_num global answer if len(answer) == len(word): answer_num += 1 if answer_num == n: r..

[n1855] 암호 in python

처음엔 주어진 문자열을 암호화하는 줄 알고 구현을 해서 시간이 좀 걸렸다. 그러나 암호화되어 있는 문자열을 원래의 문자열로 출력하는 문제였던 것..! 열은 입력값으로 주어졌다 행은 전체 문자열을 열로 나눈 값으로 정했다. aei | jfb | cgk | lhd 1번째(aei) , 3번째(cgk)는 왼쪽 -> 오른쪽으로 판별해서 a는 array[0]에 넣고 e는 array[1]에 넣고 i는 array[2]에 넣는식으로 cgk도 넣어준다. 2번째 (jfb), 4번째(lhd)는 오른쪽->왼쪽순으로 각각의 값을 array 배열에 넣어준다. j는 array[2]에 넣고 f는 array[1]에 b는 array[0]에 그러면 array=[ [a,b,c,d], [e,f,g,i], [i,j,k,l], ] 이런식으로 자리..

[n14425] 문자열 집합 in python

문자열 문제! 아래 코드는 시간초과가 떴다. 그래서 리스트 대신 set 자료구조를 이용해서 돌려보았더니 시간 초과 문제가 해결되었다! 저번 문제에서도 느꼈지만 다루는 데이터의 수가 커질수록 리스트의 연산시간은 길어진다. (이럴 땐 사용 지양) import sys input=sys.stdin.readline n, m = map(int, input().split()) sArr = [input() for _ in range(n)] cnt=0 for _ in range(m): temp = input() for i in range(n): if temp == sArr[i]: cnt+=1 print(cnt) 아래 코드는 시간초과 x 무난하게 통과하였다! import sys input=sys.stdin.readline..

카테고리 없음 2021.11.05