본문 바로가기

알고리즘

(12)
백준1038번 - 감소하는 수 자바스크립트(Node.js)풀이 문제 음이 아닌 정수 X의 자릿수가 가장 큰 자릿수부터 작은 자릿수까지 감소한다면, 그 수를 감소하는 수라고 한다. 예를 들어, 321과 950은 감소하는 수지만, 322와 958은 아니다. N번째 감소하는 수를 출력하는 프로그램을 작성하시오. 0은 0번째 감소하는 수이고, 1은 1번째 감소하는 수이다. 만약 N번째 감소하는 수가 없다면 -1을 출력한다. 입력 첫째 줄에 N이 주어진다. N은 1,000,000보다 작거나 같은 자연수 또는 0이다. 출력 첫째 줄에 N번째 감소하는 수를 출력한다. 문제유형 브루트포스 알고리즘 백트래킹 백줄이 넘어가는 정말 보기힘든 코드로 풀고있다가 너무나도 신박한 풀이를 발견하였다. 이 풀이를 nodejs 코드로 변환하고 산책을 하면서 코드를 이해해보았다. encrypted..
백준10830번 - 행렬 제곱 자바스크립트(Node.js)풀이 문제 크기가 N*N인 행렬 A가 주어진다. 이때, A의 B제곱을 구하는 프로그램을 작성하시오. 수가 매우 커질 수 있으니, A^B의 각 원소를 1,000으로 나눈 나머지를 출력한다. 입력 첫째 줄에 행렬의 크기 N과 B가 주어진다. (2 ≤ N ≤ 5, 1 ≤ B ≤ 100,000,000,000) 둘째 줄부터 N개의 줄에 행렬의 각 원소가 주어진다. 행렬의 각 원소는 1,000보다 작거나 같은 자연수 또는 0이다. 출력 첫째 줄부터 N개의 줄에 걸쳐 행렬 A를 B제곱한 결과를 출력한다. 문제유형 수학 분할 정복 분할 정복을 이용한 거듭제곱 선형대수학 행렬을 n제곱시키는 (개념적으로는)간단한문제. 하지만 시간 제한(1초)에 비해 B값이 커서 최적화를 시켜야 한다. 보통 행렬의 제곱을 최적화하는 연산은 행렬..
백준 3300번 - 무어기계 파이썬(pypy3) 풀이 문제 무어 기계는 상태에 의해서 출력이 결정되는 유한 상태 기계이다. 무어 기계는 이름은 미국의 수학자이자 컴퓨터 과학자 Edward F. Moore의 이름을 따서 지었다. 무어 기계의 상태 전이는 입력에 의해서 정해진다. 예를 들어, 입력이 "aabba"이면, 아래와 같은 무어 기계의 출력은 "PRETTY"가 된다. 위의 그림에서 동그라미는 상태를 나타내고, 화살표 위의 글자는 입력 심볼을 나타낸다. 상태 중 하나는 시작 상태로 디자인 되어져 있다. 이 상태는 출발 노드가 없는 화살표로 나타나 있다. 이 경우에 시작 상태는 1번 상태이다. 상태 N과 출력 심볼 S는 N/S로 나타낸다. 대부분 경우에 무어 기계는 사이클을 가진다. 이 문제에서는 사이클이 전혀 없는 무어 기계를 다루며, 이런 종류의 기계를..
누워서 읽는 알고리즘 서평 코딩/개발 관련 서적을 읽다보니 '임백준' 이라는 분의 이름이 자주 눈에 띈다. 여러 개발 관련 서적의 번역에 참여하시고, '누워서 읽는 알고리즘'처럼 직접 집필한 책도 있다. 책을 읽는 개발자분들이 개발 관련 서적으로 가장 추천하는 책들중 임백준님이 관여하신 책들도 많다. 이번에는 임백준님의 대표작이자, 알고리즘 입문 서적으로 좋은 평을 가지고 있는 '누워서 읽는 알고리즘'에 대해 글을 써보고자 한다. ​ 임백준님이 직접 쓰신 책은 처음인데, 이 책을 읽어보니 이분이 왜 유명한지 느끼게 되었다. 글빨이 정말 대단하다. 개발자가 쓴 책이라는 느낌보다는 전문 작가가 알고리즘에 대해 쓴 책을 읽는 느낌이다. 문장이 읽기 편한것을 넘어 아름답다는 느낌이 들면서, 이 책의 본질인 '알고리즘'에 대한 내용도 부족..