[문제] https://www.acmicpc.net/problem/1259 1259번: 팰린드롬수 입력은 여러 개의 테스트 케이스로 이루어져 있으며, 각 줄마다 1 이상 99999 이하의 정수가 주어진다. 입력의 마지막 줄에는 0이 주어지며, 이 줄은 문제에 포함되지 않는다. www.acmicpc.net [풀이] 처음 짠 코드는 입력받은 문자열 n의 맨 처음과 맨 끝에서부터 차례대로 일치하는지 비교하는 로직이다. 그러나 n을 뒤집은 값과 n이 같으면 펠린드롬수이기 때문에 [::-1]를 이용해 간단하게 풀 수 있다. [코드] - 간단 코드 if __name__ == '__main__': n = input() while n != '0': if n[::-1] == n: print("yes") else: pri..
문제풀이/BOJ
백준 알고리즘[문제] https://www.acmicpc.net/problem/9012 9012번: 괄호 괄호 문자열(Parenthesis String, PS)은 두 개의 괄호 기호인 ‘(’ 와 ‘)’ 만으로 구성되어 있는 문자열이다. 그 중에서 괄호의 모양이 바르게 구성된 문자열을 올바른 괄호 문자열(Valid PS, VPS)이라고 www.acmicpc.net [풀이] 알고리즘에 stack 카테고리가 있어서 stack을 이용해 풀었다. '('일 경우 stack에 쌓아주고, ')'일 경우 pop을 해준다. 만약 ')'이고 stack이 비어있을 경우 미리 선언해둔 flag를 True로 설정하고 조건문을 빠져나온다. 그 후 stack이 비어있고, flag이 True일 경우에는 "YES"를 출력하고 아닐 경우 "NO"를 ..
[문제] https://www.acmicpc.net/problem/10989 10989번: 수 정렬하기 3 첫째 줄에 수의 개수 N(1 ≤ N ≤ 10,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 숫자가 주어진다. 이 수는 10,000보다 작거나 같은 자연수이다. www.acmicpc.net [풀이] 간단하게 풀었더니 메모리 초과가 났다 ㅎㅎ list 문제를 풀 때 메모리 제한이 있다면 미리 0으로 초기화 한 틀을 만들어 놓은 후 증감식으로 개수를 세는 것이 유리하다고 한다. [코드] import sys if __name__ == '__main__': check = [0] * 10001 for _ in range(int(sys.stdin.readline())): n = int(sys.stdin..
[문제] 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/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) 중간 지점 값이 찾는 값보다 클 경우 -> 오른쪽 ..
[문제] https://www.acmicpc.net/problem/1049 1049번: 기타줄 첫째 줄에 N과 M이 주어진다. N은 100보다 작거나 같은 자연수이고, M은 50보다 작거나 같은 자연수이다. 둘째 줄부터 M개의 줄에는 각 브랜드의 패키지 가격과 낱개의 가격이 공백으로 구분하여 주 www.acmicpc.net [풀이] 첫 번째로 놓칠 수 있는 점은 기타 줄을 한 브랜드만 이용하지 않아도 된다는 것이다. 우선 가장 싼 패키지 가격과 낱개 가격을 package_price와 breakup_price 변수에 넣는다. 나올 수 있는 경우는 세가지 이다. 첫 번째) 패키지만 사용한 경우 두 번째) 섞어서 사용한 경우 세 번째) 낱개만 사용한 경우 끊어진 줄을 6으로 나눈 몫이 패키지로 구매 가능한 수..
[문제] 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..
[문제] 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..
[문제] 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)