전체 글(120)
-
BOJ 10814 - 나이순 정렬 (Python3)
lambda 형식으로 되어 있는 함수는 한 줄로 아주 간단한 연산을 하게 만들어주는 함수이다. 아주 간단한 연산이라고 해 봤자 어떤 경우에는 lambda를 굳이 안 써도 될 정도로 간단하겠지만, 가끔씩 쓸 만한 경우가 있다. 그런 경우의 대표적 예시 중 하나가 바로 이 문제. 그럼 본격적으로 풀이에 돌입해 보자. 문제 온라인 저지에 가입한 사람들의 나이와 이름이 가입한 순서대로 주어진다. 이때, 회원들을 나이가 증가하는 순으로, 나이가 같으면 먼저 가입한 사람이 앞에 오는 순서로 정렬하는 프로그램을 작성하시오. 입력 첫째 줄에 온라인 저지 회원의 수 N이 주어진다. (1 ≤ N ≤ 100,000) 둘째 줄부터 N개의 줄에는 각 회원의 나이와 이름이 공백으로 구분되어 주어진다. 나이는 1보다 크거나 같으며..
2022.11.23 -
BOJ 1546 - 평균 (Python3)
상당히 어려워 보이지만 풀이과정이 간단할 수 있는 문제가 있다. 이건 상당히 어렵지만 방법론만 깨닫는다면 아주 쉬워지는 26008번 문제 같은 부류를 말하는 것이 아니다. 실제로 쉽고, 발상을 깨닫기도 어렵지는 않지만 직접 구현하는 데에서 어떤 방식으로 접근하느냐가 풀이과정의 간단함에 영향을 끼친다. 그럼 본격적으로 풀이에 돌입해 보자. 문제 세준이는 기말고사를 망쳤다. 세준이는 점수를 조작해서 집에 가져가기로 했다. 일단 세준이는 자기 점수 중에 최댓값을 골랐다. 이 값을 M이라고 한다. 그리고 나서 모든 점수를 점수/M*100으로 고쳤다. 예를 들어, 세준이의 최고점이 70이고, 수학점수가 50이었으면 수학점수는 50/70*100이 되어 71.43점이 된다. 세준이의 성적을 위의 방법대로 새로 계산했..
2022.11.22 -
BOJ 1158 - 요세푸스 문제 (Python3)
상당히 코딩을 늦게 시작한 편이다. 그래서 자료구조의 자 자도 모르는 상태에서 오늘까지 이르렀다. 오늘이 정확히 16일차고, 그 동안 큐(Queue), 스택(Stack), 덱(Deque) 등의 자료구조를 어떻게 사용하는지 알았다. 힙(Heap)도 오늘 배웠는데, 아직 체화시키기에는 조금 모자라서 오늘은 덱을 사용하는 요세푸스 문제를 풀겠다. 사실 큐랑 스택을 하나로 묶어서 덱으로 쓰는 게 가장 편하더라. 덱은 큐와 스택을 한 번에 사용 가능하니 말이다. 그럼 본격적으로 풀이에 돌입해 보자. 문제 요세푸스 문제는 다음과 같다. 1번부터 N번까지 N명의 사람이 원을 이루면서 앉아있고, 양의 정수 K(≤ N)가 주어진다. 이제 순서대로 K번째 사람을 제거한다. 한 사람이 제거되면 남은 사람들로 이루어진 원을 ..
2022.11.22 -
BOJ 26008 - 해시 해킹 (Python3)
오늘 시행된 2022 홍익대학교 HI-ARC 프로그래밍 경진대회, 무려 E번 문제다. 아르바이트가 늦게 끝나서 오픈콘은 A번 문제를 폰코딩하는 데에 그쳤지만, 집에 와서 찬찬히 생각해 보니 생각보다 쉬운 문제였다. 11042번 문제와 11758번 문제처럼 방법론을 깨닫자마자 미친 듯이 하락하는 난이도의 문제는 맞다. 그러나 그 방법론을 스스로 깨닫기는 녹록치 않다. 결코. 그럼 본격적으로 풀이에 돌입해 보자. 그리고 그 전에, 수학적으로 조금 익숙하게 보이는 방법으로 원문을 조금 수정하였음을 알린다. 문제 그린닷컴의 운영자 연두는 비밀번호를 평문 그대로 저장하는 과오를 뒤로하고, 이제부터 암호에 해시 함수를 적용해 저장하려고 한다. 연두가 아는 해시 함수라고는 알고리즘 문제 풀이에 많이 사용되는 롤링 해..
2022.11.20 -
3. 벡터곱과 사원수
이 이야기는 며칠 전... 이 아니라 불과 어제, 11758번 문제에서 시작한다. 하나의 질문을 던져 본다. 벡터곱이 먼저였을까, 아니면 사원수가 먼저였을까? 사원수를 사용하면 벡터곱이 놀랄 만큼 쉬워진다는 것은 곧 포스트에서 볼 수 있듯이, 자명한 사실이다. 또한 단위원으로 2차원의 회전변환을 모두 나타낼 수 있듯이, 사원수 상의 단위구로 3차원에서의 회전변환을 모두 나타낼 수 있다. (이것은 또 곧 별도의 포스트로 다루겠다.) 이런 걸 보면 사원수가 벡터곱 및 회전변환을 다루기 위해서 발명된 것으로 보인다. 하지만 아니다. 심지어는 사원수가 벡터보다도 더 앞서 있다! 사원수, 기호로는 \(\mathbb{H}=\{a+b+cj+dk\mid a,b,c,d\in\mathbb{R}\}\)로 나타내는 확대된 수..
2022.11.18 -
BOJ 1676 - 팩토리얼 0의 개수 (Python3)
필요한 수학적 배경 지식을 중학생이 간단하게 이해할 수 있으면 브론즈 II에서 브론즈 I 티어를 주는 것이 권장되어 있다. 달리 말하면 알고리즘 짜는 게 아무리 간단하기 그지없더라도 중학생 수준에서 유추하기 어렵다면 실버 수준으로 올라간다는 이야기다. 이게 조금 불합리한 걸 넘어서 난이도 역전 현상의 주범이 되어 있는 건 내 착각일까? 내가 수학적 공대생이라서가 아니라, 이런 문제는 어지간한 브론즈 II보다도 쉬워 보인다. 그럼 본격적으로 풀이에 돌입해 보자. 문제 N!에서 뒤에서부터 처음 0이 아닌 숫자가 나올 때까지 0의 개수를 구하는 프로그램을 작성하시오. 입력 첫째 줄에 N이 주어진다. (0 ≤ N ≤ 500) 예제 입력) # 예제 입력 1 10 # 예제 입력 2 3 출력 첫째 줄에 구한 0의 개..
2022.11.18