본문 바로가기

전체 글

(45)
백준 - 5622 다이얼 본 문제의 요구사항은 다음과 같다 할머니가 오래된 다이얼을 돌리는데 걸리는 시간은 숫자의 위치에 따라 일정하게 증가한다. 즉 1은 2초 , 2는 3초 ... 9는 10초 소요된다. 할머니는 숫자를 알파벳으로 외운다. 즉 2~ 9 범위사이의 숫자만 알파벳으로 외우는 것이 가능할 것이다. 본문제를 풀기위한 특별한 기술이 필요하지 않다. 알파벳 A ~ Z 각각 소요시간을 테이블로 만든후 입력받은 문자열을 하나씩 체크해가면서 소요시간을 합산하면 된다. 단 알파벳을 통해 배열의 첨자(인덱스)를 찾기위해서는 'A' 만큼 뻬면된다. 구현된 코드는 아래와 같다 #include #include using namespace std; int main() { // A 부터 Z 까지 각 다이얼을 돌리는데 걸리는 시간에 대한 값..
백준 - 4963 섬의 개수 본 문제의 요구사항은 다음과 같다 정사각형 배열이 육지와 바다로 표시되는데 육지이면 1 섬이면 0으로 표시된다. 서로 다른 육지가 이동할수 없다면 이들은 각각 다른 섬이다. 즉 임의의 A, B 사이에 가로, 세로 그리고 대각선 방향으로 인접되어 있지 않아야 섬으로 인정된다. 아래 그림의 경우 모든육지는 대각선 방향으로 이어져 있기 때문에 한개의 섬으로 취급된다. 주어진 배열에서 섬이 몇개인지 구하는 프로그램을 작성하여야 한다. 본문제를 풀수 있는 방법은 여러가지 가 있겠지만, DFS , BFS 로 풀이하는 것이 괜찮아 보인다. step1) 방문하지 않은 임의의 육지를 방문한다. step2) 인접한 8방향의 위치중 육지인 곳을 방문한다. step3) step2 에서 방문한 각 육지에서 인접된 방문되지 않은..
백준 - 4673 셀프 넘버 본 문제의 요구사항은 다음과 같다 임의의 숫자 n 에서 n 을 구성하는 각자리숫자의 합을 d(n) 이라고 한다. 예를 들면 d(15) = 15 + 1 + 5 = 21 이다. n 은 d(n) 의 생성자라고 한다. 즉 15는 21의 생성자이다. 임의의 숫자 m 이 생성자가 없다면 이러한 숫자를 셀프넘버라고 한다. 10000 보다 작거나 같은 모든 셀프넘버를 한줄에 하나씩 출력해야 한다. 본문제의 풀이과정은 다음과 같다. 10001 개의 배열을 잡고 0으로 초기화 한다. n 은 d(n) 보다는 무조건 작기때문에 1부터 10000 까지만 d(n) 을 구한다. 배열의 d(n) 에 해당되는 index 의 값을 1로 세팅한다. 모든 d(n) 계산 완료후 배열에서 0 인 값의 index 의 집합이 셀프넘버의 집합이 된..
백준 - 4354 문자열 제곱 본 문제의 요구사항은 다음과 같다. 임의의 두문자열의 곱은 두 문자열을 서로 이어 붙인 것으로 표현한다. 예를들면 "abcd" * "efg" = "abcdefg" 따라서 문자열의 제곱도 위와 같은 방식으로 표현할수 있다. ("abcd")2 = "abcdabcd" ("aac")3 = "aacaacaac" 임의의 문자열(s) 이 주어졌을때 어떤 문자열 a에 대해서 s=an을 만족하는 가장 큰 n 을 구해야 한다. 본문제의 풀이과정은 아래와 같다. a 의 길이는 s 의 길이의 약수이어야 한다. 따라서 s 의 약수길이에 해당되는 모든 sub 문자열이 동일한 값으로 반복되는지 검사를 하면 된다. 반복여부를 판단하기 위해서는 나머지 연산자를 적절히 이용하면 된다. 예를들어 s = "abcdabcdabcd" 라고했을..
백준 1110 - 더하기 사이클 본 문제의 요구사항은 다음과 같다 - 주어지는 숫자의 범위는 0 ~ 99 이다 - 주어진 숫자의 1의 자리와 , 각자리 숫자의 합의 1의 자리 를 이어붙여 새로운 숫자를 만든다. - 이러한 과정을 반복하여 원래 수로 돌아오는 횟수가 몇번인지 구한다. 본 문제를 풀기위해서 한 사이클 즉 하나의 숫자를 다음 숫자로 변환하는 과정만 잘 도출해 내면 간단하게 해결할 수 있다. 1의 자리 숫자를 구하기 위해서는 10으로 나눈 나머지 이므로 % 연산자를 활용하면 아래 코드처럼 구현할 수 있다. #include #include #include using namespace std; void process(); int main() { int num; cin >> num; int numClone = num; int cyc..
헬릭스 성운 - 별의 마지막 잔해 NASA의 Spitzer 우주 망원경과 NASA가 캘리포니아 공과 대학 (California Institute of Technology)에 임대해 준 Galaxy Evolution Explorer (GALEX) 에 의해 합성된 이미지에서 죽어가는 별의 마지막 순간을 보여주고 있습니다. 죽으면 별의 외곽 층 ( 주로 먼지로 구성되어 있음 ) 이 우주로 빠져 나가고, 뜨거운 별의 핵에 의해 강한 자외선이 뿜어져 나옵니다. 나선 성운이라고하는이 물체는 물병 자리의 별자리에 650 광년 떨어져 있으며 행성상 성운(Helix nebula)의 전형적인 형태 입니다. 18세기에 발견 된이 우주 예술 작품들은 거대한 가스 행성으로 잘못 알려지기도 했습니다. 행성상 성운은 실제로 한때 우리 태양처럼 보였던 별들의 잔해입..
다이슨 스피어 프로젝트 다이슨 스피어(구체) 의 아이디어는 매우흥미롭고 매혹적입니다. 별의 전체 에너지 출력을 획득할 수있는 별 주위에 지어진 거대한 구조물입니다. 별 주위의 이런 종류의 구조물은 보다 진보 된 문명에 엄청난 양의 에너지를 제공 할 것입니다. 다이슨 스피어를 구상한 천체 물리학 자 프리먼 다이슨 (Freeman Dyson)은 미래의 문명은 지구를 유지하고 성장시키기 위해 지구가 제공 할 수있는 것보다 훨씬 많은 에너지가 필요하다고 말했습니다. 다이슨 스피어의 컨셉은 매우 훌륭하고 미래 지향적이며 수년간 공상 과학 작품에 등장했습니다. 하지만 프리먼 다이슨 (Freeman Dyson)은 그러한 아이디어가 그의 이름을 따서 명명되었지만 실현가능성에 대해서는 부정적이었습니다. 가장 큰 이유는 다이슨 스피어는 물리적으..
우리가 알아야할 10가지 카이퍼 벨트 이야기 그곳은 매우 미스터리하고 춥고 어둡습니다. 이곳은 방금 탐험을 시작한 곳이지만 태양계의 기원에 대한 중요한 단서를 가지고 있습니다. NASA의 뉴 호라이즌 (New Horizons)이 이미 이 지역을 마주치기 시작했고 이에 이 광대한 카이퍼 벨트 에 대해 알아야 할 10 가지가 있습니다. 1. 카이퍼 벨트는 태양계의 아니 우주의 매우 거대한 영역으로써 해왕성 궤도넘어 위치해 있습니다. 카이퍼 벨트는 태양계에서 가장 큰 구조물 중 하나입니다. 다른 것은 오르트 구름, 태양권계면및 목성의 자기권입니다. 전체 모양은 부풀어 오른 디스크 또는 도넛과 같습니다. 카이퍼 벨트는 해왕성 궤도에서 시작(30AU : 1AU 는 지구 태양간 거리) 하여 약 50AU 까지의 영역에 분포되어 있습니다. 카이퍼 벨트의 바깥 쪽..