본문 바로가기

728x90

Dev

[백준/BOJ] 백준 코딩 알고리즘 2156번 포도주 시식 Python (다이나믹 프로그래밍) 나의 풀이 import sys input = sys.stdin.readline N = int(input()) wines, dp = [], [0] * N for _ in range(N): wines.append(int(input())) for i in range(N): if i == 0: dp[i] = wines[i] elif i == 1: dp[i] = dp[i - 1] + wines[i] elif i == 2: dp[i] = max(dp[i - 1], max(wines[i - 1] + wines[i], dp[i - 2] + wines[i])) else: dp[i] = max(dp[i - 1], max(dp[i - 3] + wines[i - 1] + wines[i], dp[i - 2] + wines[i].. 더보기
[백준/BOJ] 백준 코딩 알고리즘 1976번 여행 가자 Python (유니온 파인드) 여행 계획은 간단하게 짜서 가자 친구야 첫 번째 풀이 import sys sys.setrecursionlimit(10**9) input = sys.stdin.readline N = int(input()) M = int(input()) roots = [i for i in range(N)] def find(n): # 루트 노드 찾기 if roots[n] == n: return n else: root = find(roots[n]) roots[n] = root return roots[n] def union(i, j): # 한 집합으로 연결하기 root_i = find(i) root_j = find(j) if root_i == root_j: return if root_i > root_j: roots[root_i].. 더보기
[백준/BOJ] 백준 코딩 알고리즘 1717번 집합의 표현 Python (유니온 파인드) 유니온 파인드란? 유니온 파인드: 두 노드가 같은 집합에 속하는지 판별하는 알고리즘 → 유니온 : 두 노드를 합치는 연산 → 파인드: 두 노드의 루트 노드를 찾는 연산 파인드 연산에서 고려해볼 것 a) 각 배열에 자신의 부모 노드를 저장해놓고 이를 파인드 연산에 활용한다 - 리프 노드가 차례로 다른 노드를 거쳐서 타고 올라가 루트 노드를 만나게 된다 b) 각 배열에 자신의 루트 노드를 저장해놓고 이를 파인드 연산에 활용한다 - 리프 노드와 루트노드가 바로 연결되기 때문에, 루트노드를 찾아가는 과정이 빠르다 두 a안과 b안을 비교해보았을 때, skwed tree/graph의 경우를 고려한다면 b안이 더 효율적이다! 나의 풀이 import sys sys.setrecursionlimit(10**9) input.. 더보기
[백준/BOJ] 백준 코딩 알고리즘 14889번 스타트와 링크 Python 문제 오늘은 스타트링크에 다니는 사람들이 모여서 축구를 해보려고 한다. 축구는 평일 오후에 하고 의무 참석도 아니다. 축구를 하기 위해 모인 사람은 총 N명이고 신기하게도 N은 짝수이다. 이제 N/2명으로 이루어진 스타트 팀과 링크 팀으로 사람들을 나눠야 한다. BOJ를 운영하는 회사 답게 사람에게 번호를 1부터 N까지로 배정했고, 아래와 같은 능력치를 조사했다. 능력치 Sij는 i번 사람과 j번 사람이 같은 팀에 속했을 때, 팀에 더해지는 능력치이다. 팀의 능력치는 팀에 속한 모든 쌍의 능력치 Sij의 합이다. Sij는 Sji와 다를 수도 있으며, i번 사람과 j번 사람이 같은 팀에 속했을 때, 팀에 더해지는 능력치는 Sij와 Sji이다. N=4이고, S가 아래와 같은 경우를 살펴보자. 1 2 3 4 .. 더보기
[백준/BOJ] 백준 코딩 알고리즘 11053번 가장 긴 증가하는 부분 수열 Python 문제 수열 A가 주어졌을 때, 가장 긴 증가하는 부분 수열을 구하는 프로그램을 작성하시오. 예를 들어, 수열 A = {10, 20, 10, 30, 20, 50} 인 경우에 가장 긴 증가하는 부분 수열은 A = {10, 20, 10, 30, 20, 50} 이고, 길이는 4이다. 입력 첫째 줄에 수열 A의 크기 N (1 ≤ N ≤ 1,000)이 주어진다. 둘째 줄에는 수열 A를 이루고 있는 Ai가 주어진다. (1 ≤ Ai ≤ 1,000) 출력 첫째 줄에 수열 A의 가장 긴 증가하는 부분 수열의 길이를 출력한다. 예제 입력 1 6 10 20 10 30 20 50 예제 출력 1 4 첫 번째 풀이 (오답) import sys input = sys.stdin.readline N = int(input()) A = l.. 더보기
[백준/BOJ] 백준 코딩 알고리즘 2751번 수 정렬하기 2 Python 문제 N개의 수가 주어졌을 때, 이를 오름차순으로 정렬하는 프로그램을 작성하시오. 입력 첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 수가 주어진다. 이 수는 절댓값이 1,000,000보다 작거나 같은 정수이다. 수는 중복되지 않는다. 출력 첫째 줄부터 N개의 줄에 오름차순으로 정렬한 결과를 한 줄에 하나씩 출력한다. 예제 입력 1 5 5 4 3 2 1 예제 출력 1 1 2 3 4 5 첫 번째 풀이 (내장 sort 이용) import sys input = sys.stdin.readline nums = [int(input()) for _ in range(int(input()))] for i in sorted(nums): print(i) 수를 입력받고, 내.. 더보기
[백준/BOJ] 백준 코딩 알고리즘 10988번 팰린드롬인지 확인하기 Python 문제 알파벳 소문자로만 이루어진 단어가 주어진다. 이때, 이 단어가 팰린드롬인지 아닌지 확인하는 프로그램을 작성하시오. 팰린드롬이란 앞으로 읽을 때와 거꾸로 읽을 때 똑같은 단어를 말한다. level, noon은 팰린드롬이고, baekjoon, online, judge는 팰린드롬이 아니다. 입력 첫째 줄에 단어가 주어진다. 단어의 길이는 1보다 크거나 같고, 100보다 작거나 같으며, 알파벳 소문자로만 이루어져 있다. 출력 첫째 줄에 팰린드롬이면 1, 아니면 0을 출력한다. 예제 입력 1 level 예제 출력 1 1 예제 입력 2 baekjoon 예제 출력 2 0 나의 풀이 s = input() is_pallen = True for i in range(len(s)//2): if s[i] != s[-(i+.. 더보기
[AI Basic] 활성화 함수(Activation Function) | 시그모이드(Sigmoid) | Tanh | ReLU | Leaky ReLU | ELU 활성화 함수 (Activation Function) 딥러닝 모델에서 기본적으로 하나의 신경망은 ax + b의 함수 형태이다 즉, 입력값에 대한 출력값을 선형적으로 계산하게 된다. 이러한 ax + b 형태의 함수를 여러 층 쌓아도 여전히 선형 함수 형태이게 된다 (단층 신경망과 큰 차이가 없어지는 것!) 하지만 그렇다면 예를 들어 아래와 같은 모양의 이진 분류 데이터셋이 있다면, 이는 선형 함수로만은 분류가 불가능하다 위와 같은 데이터를 제대로 분류하기 위해서는 (일반적으로 일상의 데이터는 복잡해서, 위 데이터처럼 선형분류가 불가능하다) 입력값을 선형적으로 분류하는 것이 아닌 '꺾어줄 수 있도록'! 즉, 비선형적으로 분류해주도록 해야한다 이 때 사용되는 것이 활성화 함수인데, 선형 함수의 신경망을 비선형 .. 더보기

728x90