반응형
반응형

[백준] 1005번 ACM Craft - PYTHON  https://www.acmicpc.net/problem/1005

알고리즘 분류

 

출력

건물 W를 건설완료 하는데 드는 최소 시간을 출력한다. 편의상 건물을 짓는 명령을 내리는 데는 시간이 소요되지 않는다고 가정한다.

건설순서는 모든 건물이 건설 가능하도록 주어진다.

제한

  • 2 ≤ N ≤ 1000
  • 1 ≤ K ≤ 100,000
  • 1 ≤ X, Y, W ≤ N
  • 0 ≤ Di ≤ 100,000, Di는 정수

>> 소스 

import sys
from collections import deque
 
T = int(input(" 테스트 케이스 T 입력 : "))
 
for _ in range(T):
    N,K=map(int,input(" 건물수, 건설 순서 : ").split())#건물수, 건설순서규칙
    time=[0]+list(map(int,input(" 각 건물들의 건설시간 : ").split()))#건물들의 건설시간
    seq=[[] for _ in range(N+1)]#건설순서규칙
    inDegree=[0 for _ in range(N+1)]#진입차수
    DP=[0 for _ in range(N+1)]#해당 건물까지 걸리는 시간
 
    for _ in range(K):#건설순서규칙 저장
        a,b=map(int,input(" 건설순서규칙 : ").split())
        seq[a].append(b)
        inDegree[b]+=1
 
    q = deque()
    for i in range(1,N+1):#진입차수 0인거 찾아서 큐에 넣기
        if inDegree[i]==0:
            q.append(i)
            DP[i]=time[i]
 
    while q:
        a=q.popleft()
        for i in seq[a]:
            inDegree[i]-=1#진입차수 줄이고
            DP[i]=max(DP[a]+time[i],DP[i])#DP를 이용해 건설비용 갱신
            if inDegree[i]==0:
                q.append(i)
 
 
    ans = int(input(" W : "))
    print(DP[ans])

>> 결과

>> ./1005_ACM_Craft.py 
 테스트 케이스 T 입력 : 2
 건물수, 건설 순서 : 4 4
 각 건물들의 건설시간 : 10 1 100 10
 건설순서규칙 : 1 2
 건설순서규칙 : 1 3
 건설순서규칙 : 2 4
 건설순서규칙 : 3 4
 W : 4
120
 건물수, 건설 순서 : 8 8
 각 건물들의 건설시간 : 10 20 1 5 8 7 1 43
 건설순서규칙 : 1 2
 건설순서규칙 : 1 3
 건설순서규칙 : 2 4
 건설순서규칙 : 2 5
 건설순서규칙 : 3 6
 건설순서규칙 : 5 7
 건설순서규칙 : 6 7
 건설순서규칙 : 7 8
 W : 7
39
반응형
반응형

[백준] 1004번 어린완자 the Little Prince - PYTHON

https://www.acmicpc.net/problem/1004

 

1004번: 어린 왕자

입력의 첫 줄에는 테스트 케이스의 개수 T가 주어진다. 그 다음 줄부터 각각의 테스트케이스에 대해 첫째 줄에 출발점 (x1, y1)과 도착점 (x2, y2)이 주어진다. 두 번째 줄에는 행성계의 개수 n이 주

www.acmicpc.net

 

어린 왕자

 
시간 제한메모리 제한제출정답맞힌 사람정답 비율
2 초 128 MB 33687 14843 12410 45.196%

문제

어린 왕자는 소혹성 B-664에서 자신이 사랑하는 한 송이 장미를 위해 살아간다. 어느 날 장미가 위험에 빠지게 된 것을 알게 된 어린 왕자는, 장미를 구하기 위해 은하수를 따라 긴 여행을 하기 시작했다. 하지만 어린 왕자의 우주선은 그렇게 좋지 않아서 행성계 간의 이동을 최대한 피해서 여행해야 한다. 아래의 그림은 어린 왕자가 펼쳐본 은하수 지도의 일부이다.

빨간 실선은 어린 왕자가 출발점에서 도착점까지 도달하는데 있어서 필요한 행성계 진입/이탈 횟수를 최소화하는 경로이며, 원은 행성계의 경계를 의미한다. 이러한 경로는 여러 개 존재할 수 있지만 적어도 3번의 행성계 진입/이탈이 필요하다는 것을 알 수 있다.

위와 같은 은하수 지도, 출발점, 도착점이 주어졌을 때 어린 왕자에게 필요한 최소의 행성계 진입/이탈 횟수를 구하는 프로그램을 작성해 보자. 행성계의 경계가 맞닿거나 서로 교차하는 경우는 없다. 또한, 출발점이나 도착점이 행성계 경계에 걸쳐진 경우 역시 입력으로 주어지지 않는다.

입력

입력의 첫 줄에는 테스트 케이스의 개수 T가 주어진다. 그 다음 줄부터 각각의 테스트케이스에 대해 첫째 줄에 출발점 (x1, y1)과 도착점 (x2, y2)이 주어진다. 두 번째 줄에는 행성계의 개수 n이 주어지며, 세 번째 줄부터 n줄에 걸쳐 행성계의 중점과 반지름 (cx, cy, r)이 주어진다.

출력

각 테스트 케이스에 대해 어린 왕자가 거쳐야 할 최소의 행성계 진입/이탈 횟수를 출력한다.

제한

  • -1000 ≤ x1, y1, x2, y2, cx, cy ≤ 1000
  • 1 ≤ r ≤ 1000
  • 1 ≤ n ≤ 50
  • 좌표와 반지름은 모두 정수

예제 입력 1 복사

2
-5 1 12 1
7
1 1 8
-3 -1 1
2 2 2
5 5 1
-4 5 1
12 1 1
12 1 2
-5 1 5 1
1
0 0 2

예제 출력 1 복사

3
0

예제 입력 2 복사

3
-5 1 5 1
3
0 0 2
-6 1 2
6 2 2
2 3 13 2
8
-3 -1 1
2 2 3
2 3 1
0 1 7
-4 5 1
12 1 1
12 1 2
12 1 3
102 16 19 -108
12
-107 175 135
-38 -115 42
140 23 70
148 -2 39
-198 -49 89
172 -151 39
-179 -52 43
148 42 150
176 0 10
153 68 120
-56 109 16
-187 -174 8

예제 출력 2 복사

2
5
3

 


T = int(input())
for _ in range(T):
    cnt = 0    
    x1,y1,x2,y2 = map(int, input().split())
    N = int(input())
    for i in range(N):
        cx, cy, cr = map(int, input().split())
        dist1 = (x1 - cx) ** 2 + (y1 - cy) ** 2
        dist2 = (x2 - cx) ** 2 + (y2 - cy) ** 2
        if (dist1 < cr**2 and dist2 > cr**2) or ( dist1 > cr**2 and dist2 < cr**2):
            cnt += 1
    print(cnt)

반응형
반응형

[백준] 1003번 피보나치 fibonacci - PYTHON

https://www.acmicpc.net/problem/1003

 

1003번: 피보나치 함수

각 테스트 케이스마다 0이 출력되는 횟수와 1이 출력되는 횟수를 공백으로 구분해서 출력한다.

www.acmicpc.net

"""_summary_
   1003번 피보나치 함수  https://www.acmicpc.net/problem/1003
   문제
        다음 소스는 N번째 피보나치 수를 구하는 C++ 함수이다.

        int fibonacci(int n) {
            if (n == 0) {
                printf("0");
                return 0;
            } else if (n == 1) {
                printf("1");
                return 1;
            } else {
                return fibonacci(n‐1) + fibonacci(n‐2);
            }
        }
        fibonacci(3)을 호출하면 다음과 같은 일이 일어난다.

        fibonacci(3)은 fibonacci(2)와 fibonacci(1) (첫 번째 호출)을 호출한다.
        fibonacci(2)는 fibonacci(1) (두 번째 호출)과 fibonacci(0)을 호출한다.
        두 번째 호출한 fibonacci(1)은 1을 출력하고 1을 리턴한다.
        fibonacci(0)은 0을 출력하고, 0을 리턴한다.
        fibonacci(2)는 fibonacci(1)과 fibonacci(0)의 결과를 얻고, 1을 리턴한다.
        첫 번째 호출한 fibonacci(1)은 1을 출력하고, 1을 리턴한다.
        fibonacci(3)은 fibonacci(2)와 fibonacci(1)의 결과를 얻고, 2를 리턴한다.
        1은 2번 출력되고, 0은 1번 출력된다. N이 주어졌을 때, fibonacci(N)을 호출했을 때, 0과 1이 각각 몇 번 출력되는지 구하는 프로그램을 작성하시오.
        입력
            첫째 줄에 테스트 케이스의 개수 T가 주어진다.
            각 테스트 케이스는 한 줄로 이루어져 있고, N이 주어진다. N은 40보다 작거나 같은 자연수 또는 0이다.

        출력
            각 테스트 케이스마다 0이 출력되는 횟수와 1이 출력되는 횟수를 공백으로 구분해서 출력한다.

        예제 입력 1 
            3
            0
            1
            3
        예제 출력 1 
            1 0
            0 1
            1 2
        예제 입력 2 
            2
            6
            22
        예제 출력 2 
            5 8
            10946 17711
 
처음에 zero는 1,0,1로 나열되고 one은 0,1,1로 나열된다.
그 이후의 n번째부터는 피보나치 수열(N2 = N1 + N0)로 나열된다.

그렇다면 이제, 규칙을 가지고 구현해보자.

0과 1의 초기배열을 먼저 만들어준다.
0은 [1,0,1] 1은 [0,1,1] 로 정해져있음.
for문으로 초기배열 이후 피보나치 수열로 구한 값을 배열에 추가해준다.
각 테스트케이스마다 0과 1의 횟수를 공백으로 출력해야한다.

"""

t = int(input())
zero = [1,0,1]
one = [0,1,1]

def fibo(n) : #[0,1,3]
    if len(zero) <= n :
        for i in range(len(zero), n+1) :
            zero.append(zero[i-1]+zero[i-2])
            one.append(one[i-1]+one[i-2])
    print(zero[n],one[n])

for i in range(t) : #[3]
    a = int(input()) #[0,1,3]
    fibo(a)
반응형
반응형

 

인공지능 시대
일잘러가 되는법

 

물론 인공지능이 앞서 말씀 드린 스스로 학습하고 일하는 인공 일반 지능이 아닌 이상에야, 당장 인간을 대체하지는 못할 것 같아요. 다만 미래의 세상에는 인공지능을 잘 다루는 사람과 그렇지 않은 사람의 위상은 크게 달라질 것으로 믿어요. 예를 들어 챗GPT로 무슨 일을 할 수 있을까요?

 

정확한 정보 검색

생성형 인공지능을 활용한다면, 더 빠른 속도로 정보를 찾을 수 있어요. 지메일 창업자인 폴 부하이트는 구글이 혼란에 빠지는 데까지 1~2년이 안 남았다고 경고를 했을 정도입니다. 향후 실시간 데이터를 받아들일 경우 정확하게 정보를 검색할 수 있는 사람이 더 업무 능력이, 향상될 것으로 보이는데요. 이를 위해서는 정확하 질문을 입력하는 기술(?)이 필요해요.

 

글을 작성한다

사실 글을 쓴다는 것은 고단한 일인데요. 논란이 있지만 직장에서라면 생산성 향상을 위해 유용해요. 오히려 유펜 교수인 이던 몰리는 학생들한테 일부러 챗GPT를 권장한다고 해요. “공부 알아서 하고, 더 정확하고, 더 엄격한 리포트를 갖고와하고 말이죠. 글의 눈높이가 앞으로는 더 높아질 듯 합니다.

 

데이터를 분석한다

이런 기능은 잘 안써 봤는데요. GPT를 활용해 방대한 양의 데이터를 분석할 수 있다고 해요. 어떻게? 좀 더 궁금하신 분은 여기를 클릭해 보세요.

  • 데이터 요약 요청
  • 데이터 관계 설명을 요청
  • 데이터를 토대로 미래 예측을 요청해 본다 (안되네요..)
  • 데이터 시각화를 요청 (아직은 안됩니다)
  • 추가 분석을 위한 권장 사항을 요청

 

시간 관리에 활용

유튜버인 Micha는 챗GPT를 활용해 작업 일부를 자동화하는 영상을 시연했는데요. 좌표는 여기. 인공지능을 활용해 일정과 작업 우선순위를 지정할 수 있다고 해요. 예를 들어 보고서를 작성하는 것과 상사와 회의 일정을 잡는 것처럼 일정이 겹쳐버린다면? 시간 단위로 가능한지 여부를 알려준다고 해요. 개인 비서?

반응형
반응형

알트만 가라사대  자본주의의 종언

 

오픈AI의 창업자이자 CEO이자 실리콘밸리의 전설 샘 알트만이 이틀 전 포브스와 인터뷰를 통해 이런 말을 했습니다. “우리가 왜 챗GPT를 공개한지 모르시죠?”, “자본주의는 인공지능을 감당하지 못할 수 있어요.” 샘 알트만은 와이컴비네이터의 CEO였는데요. 와이컴비네이터는 오늘날 스타트업을 육성하고 투자하는 액셀러레이터 모델의 원조입니다.

 

알트만은 루프트라는 스타트업을 설립해 4330만 달러에 매각 한 뒤 와이컴비네이터에 합류했는데요. 2014년부터 2019년까지 CEO를 역임했어요. 그러면서 2015년 일론 머스크 등과 함께 별도로 설립한 것이 오픈AI입니다. 그럼, 샘 알트만을 불러서, 어떤 메시지를 던졌는지 볼게요.

 

🤔 오픈AI는 왜 비영리 단체로 출발했나요. 혹자는 반자본주의 운동이라고도 하던데요.

👦 저는 자본주의를 사랑해요. 하지만 자본주의는 현존하는 모든 나쁜 시스템 중에서 가장 좋은 시스템일 수 있기 때문에, 더 나은 방안을 찾았으면 해요. 그리고 우려되는 것이 있어요. 인공 일반 지능(AGI)가 개발될 경우 자본주의를 무너뜨릴 수 있어요. 이 때문에 오픈AI는 다른 기업과 다른 방식으로 만들어졌어요.

 

📚 용어 : 인공 일반 지능(Artificial General Intelligence·AGI)

인간의 지시 없이도 스스로 학습과 훈련이 가능한 인공지능입니다. 인간만큼 경제적으로 중요한 일을 할 수 있습니다. 마크 구브루드 노스캐롤라이나대 교수가 1997 나노기술과 국제 안보라는 논문에서 자기 복제 시스템을 갖춘 군사용 인공지능의 출현을 전망하며 처음 사용한 단어고요.

 

🤫 그게 무슨 뜻인가요.

👦 인공 일반 지능이 정말 제대로 개발되면 좋겠어요. 하지만 만약에 고장이 날 경우 무엇인가 다른 조치가 필요할 수 있고, 이 때문에 특정 회사가 이런 인공지능을 소유해서는 안 된다고 생각해요.

 

😳 자본주의가 무너진다고요?

👦 (알트만은 인공 일반 지능이 개발될 경우 현재 시장 메커니즘인 자본주의의 작동이 어려울 것으로 내다봤어요) 인공 일반 지능은 (스스로 일해) 수익을 발생시킬 텐데 이를 어떻게 배분해야 할지가 관건일 것 같아요. 또 이런 인공지능을 누가 통제 할 수 있으며, 이를 소유한 회사는 어떤 지배구조(거버넌스)로 구성이 되어야 할까요. 정말 새로운 생각이 필요할 것 같아요.

 

🤔 그럼 왜 만드셨어요?

👦 순전히 오버톤 윈도우(Overton Window)’ 효과를 위해서입니다. 구글은 연구 실적을 공개하지 않고 있고, 인공지능이 안전하지 않을까 두려워하는 사람들이 많죠. 하지만 정말 중요한 것은 앞으로 세상에 일어날 일을 사람들이 이해하기 시작할 수 있도록 하는 것이에요. 때로는 (생각하는 것이) 불편하겠지만 건강하게 생각하는 것이 중요해요.

 

📚 용어: 오버톤 윈도(Overton Window)

오버톤 윈도는 극단적 선택지 가운데 대중이 받아들일 수 있는 정책과 사고의 범위를 뜻해요. 정책 분석가 조셉 오버톤이 명명했는데요. 사실 정책의 선호는 정치인에 대한 개인 선호가 아니래요. 군중의 사고 범위에서 결정지어진대요. 예를 들면 이래요. 1998년 외환위기를 계기로 국제통화기금(IMF)이 대규모 정리해고를 권고하자, 국민이 이를 받아들였죠? 그 이전에는 상상조차 할 수 없었던 일인데...

 

🔎 크게 보기

마라 무라티 최고기술책임자 CTO 역시 사회적 담론의 필요성을 주장했어요. 특히 무라티 CTO는 챗GPT를 규제해 달라고까지 역설을 했는데요. 지금이라도 규제를 하는 것이 늦지 않았으니, 정부 규제당국 일반인이 머리를 맞대자고 했어요.

반응형
반응형

[PYTHON] FLASK 플라스크

https://wikidocs.net/book/4542

 

점프 투 플라스크

**점프 투 플라스크 종이 책 출간 !! (2020.11)** * [책 구입 안내](https://wikidocs.net/102760) 점프 투 플라스크는 파이보…

wikidocs.net

점프 투 플라스크

지은이 : 박응용
최종 편집일시 : 2022년 11월 21일 8:20 오후
저작권 : 
e-book 판매가 : 7,000원 (구매하기)

점프 투 플라스크 종이 책 출간 !! (2020.11)

"점프 투 플라스크"는 "파이보"라는 이름의 파이썬 게시판(Python Board) 서비스를 만들어가는 과정을 설명한 플라스크 입문서이다. 파이썬 설치부터 시작하여 서비스 운영까지 웹 프로그래밍의 처음부터 끝까지 모든 것을 알 수 있도록 구성하였다.

이 책을 따라하다 보면 다음과 같은 웹 사이트가 만들어진다. (최종 결과물)

파이썬 전반에 대한 질문과 답변은 최근 오픈한 파이썬 게시판 서비스인 파이보를 활용하도록 하자.

책을 따라하다 생기는 질문은 파이보의 완성형인 아래사이트를 활용하도록 하자.

반응형

+ Recent posts