첫 번째 시도 input = __import__('sys').stdin.readline d = dict() for _ in range(int(input())): n = input() if n in d.keys(): d[n] += 1 else: d[n] = 1 max_value = max(list(d.values())) pos_keys = list() neg_keys = list() for i in d.keys(): if int(i) > 0: pos_keys.append(i) pos_keys.sort() if int(i)
Koala - 9기/기초 알고리즘 스터디
https://www.acmicpc.net/problem/2828 2828번: 사과 담기 게임 상근이는 오락실에서 바구니를 옮기는 오래된 게임을 한다. 스크린은 N칸으로 나누어져 있다. 스크린의 아래쪽에는 M칸을 차지하는 바구니가 있다. (M> 오른쪽 기준으로 N칸 이 세가지 경우를 생각하면 이동해야할 최소 거리를 구할 수 있다.
문제 https://www.acmicpc.net/problem/1302 1302번: 베스트셀러 첫째 줄에 오늘 하루 동안 팔린 책의 개수 N이 주어진다. 이 값은 1,000보다 작거나 같은 자연수이다. 둘째부터 N개의 줄에 책의 제목이 입력으로 들어온다. 책의 제목의 길이는 50보다 작거나 같고 www.acmicpc.net 문제 풀이과정 사용자로부터 정수 n을 입력 받은 후 n번 만큼 for 루프를 돌리며 입력을 받는다. 가장 많이 입력된 책을 찾기 위해 책의 이름을 key값으로 두고, 책의 갯수를 value로 두는 딕셔너리를 이용한다. 그 후 다시 for 루프를 돌리며 가장 큰 값을 가지는 key를 찾아 ans리스트에 추가한 후, 이걸 정렬하여 가장 첫번째 요소가 출력되도록 한다. 개선방안 처음 이 문..
https://www.acmicpc.net/problem/1673 1673번: 치킨 쿠폰 강민이는 치킨 한 마리를 주문할 수 있는 치킨 쿠폰을 n장 가지고 있다. 이 치킨집에서는 치킨을 한 마리 주문할 때마다 도장을 하나씩 찍어 주는데, 도장을 k개 모으면 치킨 쿠폰 한 장으로 교환 www.acmicpc.net 문제분석 입력으로 주어지는 것: 현재 갖고있는 치킨쿠폰 개수, 치킨쿠폰 하나로 교환할 수 있는 도장의 개수(k) 출력: 최대로 먹을 수 있는 치킨의 개수 문제풀이 재귀함수를 이용해서 문제를 해결 하였다. (현재 갖고있는 쿠폰 수, k, 현재 까지 먹은 치킨의 개수)를 입력받고 함수안에서는, 한 프로세스에서 새로 생기는 쿠폰을 포함한 현재 갖고있는 쿠폰 수를 계산하고, 지금 프로세스에서 먹은 치킨을..
https://www.acmicpc.net/problem/6502 문제 대전 ACM-ICPC Regional가 끝나면, 대회 참가자들은 다같이 카이스트 근처의 동혁 피자에 간다. 대회는 5시간동안 진행되므로, 참가자는 모두 배가 매우 고프다. 피자를 최대한 빨리 먹기 위해서, 큰 피자를 하나 시키려고 한다. 생각해보니 피자가 너무 크면 식탁 위에 맞지 않을 수도 있다. 식탁은 원이고, 피자는 직사각형이다. 식탁의 반지름과 피자의 크기가 주어졌을 때, 피자가 식탁에 맞는 크기인지 아닌지를 구하는 프로그램을 작성하시오. 문제 코드 문제 풀이 r에 0이 입력되기 전까지 무한반복 되는 while 문을 작성함. 그 후 w, l을 입력받음. 문제에서 말하는 테이블 안에 피자가 놓여지기 위해서는 피타고라스 정리에 의..
www.acmicpc.net/problem/1157 1157번: 단어 공부 알파벳 대소문자로 된 단어가 주어지면, 이 단어에서 가장 많이 사용된 알파벳이 무엇인지 알아내는 프로그램을 작성하시오. 단, 대문자와 소문자를 구분하지 않는다. www.acmicpc.net 코드 let input = require('fs').readFileSync('/dev/stdin').toString().toLowerCase(); const result = new Array(26).fill(0); for (let i = 0; i
https://www.acmicpc.net/problem/14724 14724번: 관리자는 누구? PROBRAIN, GROW, ARGOS, ADMIN, ANT, MOTION, SPG, COMON, ALMIGHTY중 동문 커뮤니티 관리자로 선발되는 후보가 소속한 동아리의 이름을 대문자로 출력한다. www.acmicpc.net 문제 소스코드 풀이 이 문제를 봤을 때 동아리 순서도 정해져있고, 후보를 뽑는 것도 max를 뽑기 때문에 리스트를 여러개 이용하면 풀 수 있을 것 같다는 생각이 들었다. 리스트안에 for문을 이용하는 컴프리헨션도 써서 간결하게 풀 수 있었다.
문제 링크 https://www.acmicpc.net/problem/1673 문제 문제 해석 도장과 쿠폰을 이용해서 치킨을 몇 마리까지 먹을 수 있을지 계산하는 문제입니다. 처음 문제를 풀 때, 도장과 쿠폰의 관계를 잠시 헷갈려서 문제를 푸는데 어려움이 있었네요. 코드 #include #include using namespace std; int chicken, n, k, stamp = 0; int main() { while (scanf("%d %d", &n, &k) != EOF) { chicken = 0; stamp = 0; while (1) { chicken += n; stamp += n; n = 0; n += stamp / k; stamp = stamp % k; if (n == 0) { break; ..
문제 Algorithm 먼저 상자의 크기가 1일 경우를 살펴보자. 사과가 처음 떨어질 때 상자의 이동거리는 상자의 처음 위치와 사과의 위치의 차이이다. 이후로는 현재 사과의 위치와 다음 사과의 위치의 차이가 상자의 이 구간에서의 이동거리가 될 것이다. 모든 구간에서의 이동거리의 합이 답이 될 것이다. 하지만 상자의 크기가 1보다 클 경우에는 상자의 최소 이동거리를 이렇게 구할 수 없다. 먼저 상자의 좌우 각각을 기준으로 더 작은 값이 나오는 쪽을 총 이동거리에 더해간다. $t$시간에서 상자의 가장 왼쪽 부분의 위치, 가장 오른쪽 부분의 위치, 사과의 위치를 각각 $a_t,\ L_t,\ R_t$라 하자. 상자의 크기는 $M$이므로 항상 $R_t = L_t + M$의 관계가 성립한다. 상자의 처음 위치는 $..
https://www.acmicpc.net/problem/1181 1181번: 단어 정렬 첫째 줄에 단어의 개수 N이 주어진다. (1 ≤ N ≤ 20,000) 둘째 줄부터 N개의 줄에 걸쳐 알파벳 소문자로 이루어진 단어가 한 줄에 하나씩 주어진다. 주어지는 문자열의 길이는 50을 넘지 않는다. www.acmicpc.net 아주 기본적인 것들을 충실하게 물어본 문제입니다. 정렬을 하는데 조건이 2개 이상이면 이중 for 문이나 if 문을 사용해도 되지만, lambda 함수를 사용하여 깔끔하게 정리할 수 있습니다. 이 문제를 풀기 위해 알아야 하는 파이썬 기초 개념 set 자료형은 중복을 제거할 수 있으나, 순서가 없기 때문에 list(set(arr)) 형식으로 종종 사용된다. (정렬이 필요할 때) set ..
백준 6502 동혁피자 알고리즘 분류 : 수학, 구현, 기하학, 피타고라스 정리 링크 : https://www.acmicpc.net/problem/6502 6502번: 동혁 피자 입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스는 숫자 세 개로 이루어져 있고, 순서대로 r, w, l이다. r은 식탁의 반지름이고, w와 l은 피자의 너비와 높이이다. (1 ≤ r ≤ 1000 www.acmicpc.net 문제분석 반지름이 r인 원 안에 너비가 w. 높이가 l인 피자가 놓여질 수 있는지 없는지를 판단하는 문제이다. 직사각형 모양의 피자가 원을 벗어나지 않고 놓이기 위해서는 피자의 대각선의 길이가 테이블의 지름의 길이를 초과해선 안된다. 이 때 직사각형의 대각선 길이 x는 (w^2 + x^2)..
문제 문제코드 x=int(input()) boo={} for i in range(x): a=input() if a in boo: boo[a]+=1 else: boo[a]=1 key=list(boo.keys()) value=max(list(boo.values())) t=[] for j in range(len(key)): if boo[key[j]]==value: t.append(key[j]) t.sort() print(t[0]) 문제 풀이 우선 책을 입력받고 boo라는 딕셔너리 안에 책이 없다면 key값을 만들어주고 value 값으로 1을 준다. 그런식으로 모두 받은 다음 value값중 가장 큰 값을 max함수로 찾아내고 max로 찾은 값과 매칭하여 책을 찾아낸다. 그중 사전순으로 정렬할때가장앞의 값을 출력..