백준/Silver(1~5) (33) 썸네일형 리스트형 [백준]_1064번 : 평행사변형(파이썬 and C언어) 1064번: 평행사변형 평행사변형은 평행한 두 변을 가진 사각형이다. 세 개의 서로 다른 점이 주어진다. A(xA,yA), B(xB,yB), C(xC,yC) 이때, 적절히 점 D를 찾아서 네 점으로 평행사변형을 만들면 된다. 이때, D가 여러 개 나 www.acmicpc.net 필자에게 이 문제는 백준 문제풀이 사상 최초로 아이디어가 하나도 안 떠올라 샷건을 치고 구글에 솔루션을 검색하여 예상보다 너무 간단했던 해결책에 절망했던 문제이다. 이 글을 찾아준 독자들 또한 같은 여정을 견디고 온 것이라 생각한다. 이제 이 문제를 구현하려면 어떤 사고과정이 수반되었어야 하는지 살펴나가 보자. 관찰 아마 가장 많이 떠올랐을 해결책은 어차피 세 점이 주어졌을 때 존재할 수 있는 평행사변형은 많아봐야 3개이기 때문에.. [백준]_18221번 : 교수님 저는 취업할래요 18221번: 교수님 저는 취업할래요 성규는 학점이 높고 알고리즘도 잘 다루는 편이라 매년 알고리즘 대회에 나가 수상을 해오곤 한다. 성규의 꿈은 대학교 4학년 칼졸업을 하고 나서 좋은 대기업에 취직하여 빨리 돈을 버는 것이 www.acmicpc.net 개인적으로 설정 자체가 너무 웃겨서 가장 재밌게 풀었던 문제 중 하나로 손꼽힌다 하지만 필자는 대학원 지망생... 얼핏 문제를 보기에는 성규와 교수님 사이의 거리, 성규와 교수님이 각 직사각형의 꼭짓점을 이루는 직사각형 안에 있는 다른 학생(1)들의 수만 고려해 주면 되는 간단한 문제처럼 보인다. 하지만 필자는 이 문제를 무려 6번이나 심지어 파이썬으로!! 틀리고 나서야 정답을 출력받을 수 있었다. 이 글을 보고 있는 사람들은 나와 같은 실수를 하지 않기.. [백준]_11659번 : 구간 합 구하기 4(파이썬 and C언어) 11659번: 구간 합 구하기 4 첫째 줄에 수의 개수 N과 합을 구해야 하는 횟수 M이 주어진다. 둘째 줄에는 N개의 수가 주어진다. 수는 1,000보다 작거나 같은 자연수이다. 셋째 줄부터 M개의 줄에는 합을 구해야 하는 구간 i와 j www.acmicpc.net 해석 사용자가 입력한 배열에서 i 번째 요소부터 j 번째 요소까지의 합을 출력하면 된다. 단 i 와 j 가 같을 때는 해당 요소만 출력한다. 문제에서 무리한 요구를 하고 있지는 않지만 시간 초과, 런타임 에러, 메모리 초과만악의 근원들..들을 조심해야 함을 알 수 있다. 쉬운 문제가 괜히 실버 3이 아닐 것이다.. 전략 구간 합이기 때문에 원하는 구간만 잘라서 합을 구해보는 방법이 있을 것이다. 이 방법이 가장 간단해 보이니 시도해 보자. .. [백준]_1427번 : 소트인사이드(파이썬 and C언어) 1427번: 소트인사이드 첫째 줄에 정렬하려고 하는 수 N이 주어진다. N은 1,000,000,000보다 작거나 같은 자연수이다. www.acmicpc.net 단순히 존재하는 숫자들을 1자리 숫자로 쪼갠 뒤 내림차순으로 정렬하면 되는 문제이다. 전략 쪼갠 원소(1234 -> 1, 2, 3, 4 )들을 배열 안으로 넣은 뒤 내림차순으로 정렬하는 과정을 통해 최종 답을 도출해 낸다. 시도 1(Python) import sys input = sys.stdin.readline num = list(input().strip()) arr = [] for i in num: arr.append(int(i)) arr.sort(reverse=True) print(''.join(str(n) for n in arr)) 웬만한 .. [백준]_1316번 : 그룹 단어 체커(파이썬 and C언어) 1316번: 그룹 단어 체커 그룹 단어란 단어에 존재하는 모든 문자에 대해서, 각 문자가 연속해서 나타나는 경우만을 말한다. 예를 들면, ccazzzzbb는 c, a, z, b가 모두 연속해서 나타나고, kin도 k, i, n이 연속해서 나타나기 때 www.acmicpc.net 전략 조금 까다로워 보이는 문제이다. 어느 알파벳이 연속으로 배치되어 있는지 알아내야 하고 또한 한 번만 쓰인 알파벳이면 연속이라고 가정해야 한다. 파이썬은 다행히도 문자열을 원하는 인덱스 범위 안에서 자를 수 있다. 따라서 인덱스 i와 i+1의 요소가 같다면 i를 1 증가시키고 만약 같지 않다면 문자를 [i+2:]로 묶는다. 예를 들어 apple을 [2:]로 묶으면 ple가 된다. 시도 1(Python) import sys in.. [백준]_1312 번 : 소수(파이썬 and C언어) 1312번: 소수 피제수(분자) A와 제수(분모) B가 있다. 두 수를 나누었을 때, 소숫점 아래 N번째 자리수를 구하려고 한다. 예를 들어, A=3, B=4, N=1이라면, A÷B=0.75 이므로 출력 값은 7이 된다. www.acmicpc.net 관찰 솔직히 처음 보았을 때는 너무 쉬워 보였다. 하지만 우리의 컴퓨터는 소수점을 잘 다루지 못한다.. 또한 계산할 숫자들의 크기를 조심해야 한다. 일단 a/b의 값을 c에 저장하고 c를 소수점 아래로 쪼개는 방법이 있을 것이다. 하지만 이렇게 할 시 어떤 문제점이 생기는지 확인해 보자. 시도 1(Python) import sys input=sys.stdin.readline a,b,n=map(int, input().split()) ls=list(str(a/b.. [백준]_1181번 : 단어 정렬(파이썬 and C언어) 1181번: 단어 정렬 첫째 줄에 단어의 개수 N이 주어진다. (1 ≤ N ≤ 20,000) 둘째 줄부터 N개의 줄에 걸쳐 알파벳 소문자로 이루어진 단어가 한 줄에 하나씩 주어진다. 주어지는 문자열의 길이는 50을 넘지 않는다. www.acmicpc.net 그냥 말 그대로 조건들만 만족시키면 된다. 다행히도 파이썬은 리스크에 문자형 자료형이 있어도 sort을 사용하면 알파벳 순서로 정리해 주는 쩌는 기능이 있다. 또한 중복을 제거하는 조건은 집합(set)을 통해 간단히 해결할 수 있는데, 대신 순서가 중구난방으로 바뀌기 때문에 다시 list로 만들어주는 작업은 수도 없이 해보아서 이번 문제는 그다지 험난한 길이 아닐 것 같다 전략 단어를 하나 씩 리스트(ls)로 받는다. 그냥 input과 sys를 이용했.. [백준]_1193 : 분수 찾기(파이썬 and C언어) 1193번: 분수찾기 첫째 줄에 X(1 ≤ X ≤ 10,000,000)가 주어진다. www.acmicpc.net 분수 표에서 지그재그로 내려오면서 몇 번째 순서에 어떤 분수를 출력할지 고민해야 되는 패턴에 미쳐버린 문제이다. 규칙 사냥 규칙은 단순 계산의 연속이기 때문에 인간보다 제대로 된 수식만 알려준다면 컴퓨터가 잘 해결해 줄 것이다. 먼저 위의 표를 보면서 규칙을 생각해 보자. 뭔가 시점(빨간 화살표)이 대각선으로 움직이는 것에서 규칙을 찾아내기에는 살짝 불편한 것 같다. 따라서 아래와 같이 표를 변형시켜 주겠다. 1 / 1 (1) 1 / 2 (2) 2 / 1 (3) 3 / 1 (4) 2 / 2 (5) 1 / 3 (6) 1 / 4 (7) 2 / 3 (8) 3 / 2 (9) 4 / 1 (10) 분수 .. 이전 1 2 3 4 5 다음