일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 몽골 고기
- 초원
- 게르
- Python
- ICT봉사단
- LG글로벌챌린저
- 한 줄로 서기
- algorithm
- 알고리즘
- 몽골
- 코로나
- 월드프렌즈
- 소프트웨어 아카데미
- 교환학생
- 몽골요리
- 월드프렌즈 ICT 봉사단
- 칭기스칸 동상
- 백준
- 테를지
- 몽골 헬스장
- 헬스
- 담슈타트
- 칭기즈칸
- 테를지국립공원
- 아부다비
- SWEA
- 여행
- 독일
- 울란바토르
- 파이썬
- Today
- Total
목록IT/알고리즘 (95)
맛있는물회
문제 조건 어떤 N개의 수가 주어져 있다. 그런데 중간에 수의 변경이 빈번히 일어나고 그 중간에 어떤 부분의 합을 구하려 한다. 만약에 1,2,3,4,5 라는 수가 있고, 3번째부터 4번째 수에 6을 더하면 1, 2, 9, 10, 5가 되고, 여기서 2번째부터 5번째까지 합을 구하라고 한다면 26을 출력하면 되는 것이다. 그리고 그 상태에서 1번째부터 3번째 수에 2를 빼고 2번째부터 5번째까지 합을 구하라고 한다면 22가 될 것이다. Input 첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000,000)과 M(1 ≤ M ≤ 10,000), K(1 ≤ K ≤ 10,000) 가 주어진다. M은 수의 변경이 일어나는 횟수이고, K는 구간의 합을 구하는 횟수이다. 그리고 둘째 줄부터 N+1번째 줄까지 N개의 수..
문제 조건 숫자 카드는 정수 하나가 적혀져 있는 카드이다. 상근이는 숫자 카드 N개를 가지고 있다. 정수 M개가 주어졌을 때, 이 수가 적혀있는 숫자 카드를 상근이가 몇 개 가지고 있는지 구하는 프로그램을 작성하시오. Input 첫째 줄에 상근이가 가지고 있는 숫자 카드의 개수 N(1 ≤ N ≤ 500,000)이 주어진다. 둘째 줄에는 숫자 카드에 적혀있는 정수가 주어진다. 숫자 카드에 적혀있는 수는 -10,000,000보다 크거나 같고, 10,000,000보다 작거나 같다. 셋째 줄에는 M(1 ≤ M ≤ 500,000)이 주어진다. 넷째 줄에는 상근이가 몇 개 가지고 있는 숫자 카드인지 구해야 할 M개의 정수가 주어지며, 이 수는 공백으로 구분되어져 있다. 이 수도 -10,000,000보다 크거나 같고..
문제 조건 LCS(Longest Common Subsequence, 최장 공통 부분 수열)문제는 두 수열이 주어졌을 때, 모두의 부분 수열이 되는 수열 중 가장 긴 것을 찾는 문제이다. 예를 들어, ACAYKP와 CAPCAK의 LCS는 ACAK가 된다. Input 첫째 줄과 둘째 줄에 두 문자열이 주어진다. 문자열은 알파벳 대문자로만 이루어져 있으며, 최대 1000글자로 이루어져 있다. Output 첫째 줄에 입력으로 주어진 두 문자열의 LCS의 길이를 출력한다. 생각한 아이디어 아주 유명한 LCS 문제이다. 맨첨에 LIS 알고리즘 푸는 방법으로 접근했다. 1차원 DP로 그렇게 했더니 테스트 케이스는 다 맞았는데 예를들어 ABCD DBCA 같은 경우는 A가 젤 끝 A와 다시 비교되어서 B를 다시 보지 못..
문제 조건 당신은 상범 빌딩에 갇히고 말았다. 여기서 탈출하는 가장 빠른 길은 무엇일까? 상범 빌딩은 각 변의 길이가 1인 정육면체(단위 정육면체)로 이루어져있다. 각 정육면체는 금으로 이루어져 있어 지나갈 수 없거나, 비어있어서 지나갈 수 있게 되어있다. 당신은 각 칸에서 인접한 6개의 칸(동,서,남,북,상,하)으로 1분의 시간을 들여 이동할 수 있다. 즉, 대각선으로 이동하는 것은 불가능하다. 그리고 상범 빌딩의 바깥면도 모두 금으로 막혀있어 출구를 통해서만 탈출할 수 있다. 당신은 상범 빌딩을 탈출할 수 있을까? 만약 그렇다면 얼마나 걸릴까? Input 입력은 여러 개의 테스트 케이스로 이루어지며, 각 테스트 케이스는 세 개의 정수 L, R, C로 시작한다. L(1 ≤ L ≤ 30)은 상범 빌딩의 ..
문제 조건 N개의 정수 A[1], A[2], …, A[N]이 주어져 있을 때, 이 안에 X라는 정수가 존재하는지 알아내는 프로그램을 작성하시오. Input 첫째 줄에 자연수 N(1≤N≤100,000)이 주어진다. 다음 줄에는 N개의 정수 A[1], A[2], …, A[N]이 주어진다. 다음 줄에는 M(1≤M≤100,000)이 주어진다. 다음 줄에는 M개의 수들이 주어지는데, 이 수들이 A안에 존재하는지 알아내면 된다. 모든 정수의 범위는 -231 보다 크거나 같고 231보다 작다. Output M개의 줄에 답을 출력한다. 존재하면 1을, 존재하지 않으면 0을 출력한다. 생각한 아이디어 당연히 브루트포스로 풀면 안되니깐 정답률이 28프로겠지?? 이분탐색느낌.. 솔직히 이분탐색이라는 힌트만 얻으면 쉽게 풀수..
문제 조건 민식이는 수학학원에서 단어 수학 문제를 푸는 숙제를 받았다. 단어 수학 문제는 N개의 단어로 이루어져 있으며, 각 단어는 알파벳 대문자로만 이루어져 있다. 이때, 각 알파벳 대문자를 0부터 9까지의 숫자 중 하나로 바꿔서 N개의 수를 합하는 문제이다. 같은 알파벳은 같은 숫자로 바꿔야 하며, 두 개 이상의 알파벳이 같은 숫자로 바뀌어지면 안 된다. 예를 들어, GCF + ACDEB를 계산한다고 할 때, A = 9, B = 4, C = 8, D = 6, E = 5, F = 3, G = 7로 결정한다면, 두 수의 합은 99437이 되어서 최대가 될 것이다. N개의 단어가 주어졌을 때, 그 수의 합을 최대로 만드는 프로그램을 작성하시오. Input 첫째 줄에 단어의 개수 N(1 ≤ N ≤ 10)이 ..
[딕셔너리 Sorting하기] 딕셔너리는 Key : Value 로 구성되어있다. *key값을 기준으로 정렬 arr = {1:0, 2:1, 3:2} arr=sorted(arr.items()) 로 하면 정렬이 된다. 하지만 Value 값으로 정렬을 하고 싶으면 조금 복잡하다.... *Value 값을 기준으로 정렬 먼저 import operator를 해준다. arr = {1:0, 2:1, 3:2} arr=sorted(arr.items(), key=key=operator.itemgetter(1)) 이렇게 해준다. operator.itemgetter(1)의 의미는 item 값이 (1,0) 이렇게 key, value 를 리턴해주는데 item 값의 1번째 인덱스 값을 기준으로 소팅하겠다는 뜻이다!! 따라서 우리가 원..