Algorithm

·문제풀이/BOJ
[문제] https://www.acmicpc.net/problem/10814 10814번: 나이순 정렬 온라인 저지에 가입한 사람들의 나이와 이름이 가입한 순서대로 주어진다. 이때, 회원들을 나이가 증가하는 순으로, 나이가 같으면 먼저 가입한 사람이 앞에 오는 순서로 정렬하는 프로그램을 www.acmicpc.net [풀이] [코드] if __name__ == '__main__': members = [] for _ in range(int(input())): members.append(list(input().split())) members.sort(key=lambda x: int(x[0])) for i in range(len(members)): print(members[i][0], members[i][1])
[문제] https://www.acmicpc.net/problem/10773 10773번: 제로 첫 번째 줄에 정수 K가 주어진다. (1 ≤ K ≤ 100,000) 이후 K개의 줄에 정수가 1개씩 주어진다. 정수는 0에서 1,000,000 사이의 값을 가지며, 정수가 "0" 일 경우에는 가장 최근에 쓴 수를 지우고, 아닐 경 www.acmicpc.net [풀이] 0이 입력될 때마다 이전 값 중 가장 최근에 쓴 값을 지워야 한다. 이는 LIFO(Last In First Out) 방식을 사용하는 stack과 작동방식이 동일하다. 따라서 입력값을 n으로 받아 n이 0일 경우 stack에 있는 값을 pop() 하고, (리스트.pop() 할 경우 가장 마지막 원소가 빠져나감) n이 0이 아닐 경우에 stack에 ..
·문제풀이/BOJ
[문제] https://www.acmicpc.net/problem/1920 1920번: 수 찾기 첫째 줄에 자연수 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 줄에는 N개의 정수 A[1], A[2], …, A[N]이 주어진다. 다음 줄에는 M(1 ≤ M ≤ 100,000)이 주어진다. 다음 줄에는 M개의 수들이 주어지는데, 이 수들 www.acmicpc.net [풀이] 두 번째 코드로 먼저 풀었는데 재귀로 압축할 수 있을 것 같아서 재귀로도 풀어봤다. 1. 먼저 리스트 a를 정렬시킨다. 2. 왼쪽과 오른쪽 인덱스를 지정한다. 3. 왼쪽, 오른쪽 인덱스 값을 이용해 중간 지점 인덱스를 구한다. 4. 중간 지점의 값과 찾고자하는 값을 비교한다. 1) 중간 지점 값이 찾는 값보다 클 경우 -> 오른쪽 ..
·문제풀이/BOJ
[문제] https://www.acmicpc.net/problem/1049 1049번: 기타줄 첫째 줄에 N과 M이 주어진다. N은 100보다 작거나 같은 자연수이고, M은 50보다 작거나 같은 자연수이다. 둘째 줄부터 M개의 줄에는 각 브랜드의 패키지 가격과 낱개의 가격이 공백으로 구분하여 주 www.acmicpc.net [풀이] 첫 번째로 놓칠 수 있는 점은 기타 줄을 한 브랜드만 이용하지 않아도 된다는 것이다. 우선 가장 싼 패키지 가격과 낱개 가격을 package_price와 breakup_price 변수에 넣는다. 나올 수 있는 경우는 세가지 이다. 첫 번째) 패키지만 사용한 경우 두 번째) 섞어서 사용한 경우 세 번째) 낱개만 사용한 경우 끊어진 줄을 6으로 나눈 몫이 패키지로 구매 가능한 수..
·문제풀이/BOJ
[문제] https://www.acmicpc.net/problem/4796 4796번: 캠핑 입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스는 한 줄로 이루어져 있고, L, P, V를 순서대로 포함하고 있다. 모든 입력 정수는 int범위이다. 마지막 줄에는 0이 3개 주어진다. www.acmicpc.net [풀이] 휴가 v일 중 v//p 값은 캠핑장을 온전히 이용할 수 있는 날이다. 휴가 v일 중 v%p과 l 중 더 작은 일수만큼 캠핑장을 이용할 수 있다. [코드] - 첫 번째 방법 if __name__ == '__main__': case = 0 while True: l, p, v = map(int, input().split()) if l+p+v == 0: break case += 1..
·문제풀이/BOJ
[문제] https://www.acmicpc.net/problem/4659 4659번: 비밀번호 발음하기 좋은 패스워드를 만드는것은 어려운 일이다. 대부분의 사용자들은 buddy처럼 발음하기 좋고 기억하기 쉬운 패스워드를 원하나, 이런 패스워드들은 보안의 문제가 발생한다. 어떤 사이트들은 xvtp www.acmicpc.net [풀이] 한번에 맞아서 기분이 너무 좋았다 ㅎㅎ 스프링으로 받았던 스트레스 5%정도는 풀린 기분.. 풀이는 주석에 달아놓았다. [코드] if __name__ == '__main__': while True: password = input() if password == "end": break vowels = "aeiou" vowel_cnt = 0 vowel_repeat, consonan..
·문제풀이/BOJ
[문제] https://www.acmicpc.net/problem/1789 1789번: 수들의 합 첫째 줄에 자연수 S(1 ≤ S ≤ 4,294,967,295)가 주어진다. www.acmicpc.net [풀이] 최대한 자연수를 많이 더하기 위해서는 작은 수부터 더해야 한다. 따라서 총 더한 수인 sum_num이 입력 수 s보다 클 때까지 1부터 차례대로 더하고 sum_num이 s보다 커졌을 때 반복문을 나와 cnt - 1을 출력한다. [코드] if __name__ == '__main__': s = int(input()) cnt = 0 sum_num = 0 while True: cnt += 1 sum_num += cnt if sum_num > s: break print(cnt - 1)
·문제풀이/BOJ
[문제] https://www.acmicpc.net/problem/1769 1769번: 3의 배수 문제가 잘 풀리지 않을 때, 문제를 바라보는 시각을 조금만 다르게 가지면 문제가 쉽게 풀리는 경험을 종종 해 보았을 것이다. 여러 가지 방법이 있지만 그 중 하나로 우리가 풀고 싶은 문제를 www.acmicpc.net [풀이] 문제의 알고리즘 분류에 재귀가 있어서 재귀로 풀었다. 매개변수로 온 string의 길이가 1보다 큰 경우 conversion 함수를 재귀 호출한다. [코드] def conversion(string, cnt): if len(string) > 1: cnt += 1 n = 0 for i in string: n += int(i) conversion(str(n), cnt) else: if in..
·문제풀이/BOJ
[문제] https://www.acmicpc.net/problem/1969 1969번: DNA DNA란 어떤 유전물질을 구성하는 분자이다. 이 DNA는 서로 다른 4가지의 뉴클레오티드로 이루어져 있다(Adenine, Thymine, Guanine, Cytosine). 우리는 어떤 DNA의 물질을 표현할 때, 이 DNA를 이루는 뉴클레오 www.acmicpc.net [풀이] DNA 리스트를 열 단위로 봤을 때 가장 많을 것을 한 개씩 고른다. 예를 들어 첫 번째 열에서 문자 A가 가장 많을 경우 결과로 출력될 첫 번째 문자는 A가 된다. Hamming Distance의 합은 DNA의 수 n에서 가장 많이 나온 문자의 개수 max(A)를 빼면 가장 많이 나온 문자와 일치하지 않는 갯수가 나온다. [코드] i..
서채리
'Algorithm' 태그의 글 목록 (9 Page)