본문 바로가기

코딩과 알고리즘

백준 알고리즘 5567. 결혼식 빰빠빠바~ 빰빠빠바~ 화려한 음악소리와 함께 결혼식이 시작되었습니다. ​ https://www.acmicpc.net/problem/5567 5567번: 결혼식 문제 상근이는 자신의 결혼식에 학교 동기 중 자신의 친구와 친구의 친구를 초대하기로 했다. 상근이의 동기는 모두 N명이고, 이 학생들의 학번은 모두 1부터 N까지이다. 상근이의 학번은 1이다. 상근이는 동기들의 친구 관계를 모두 조사한 리스트를 가지고 있다. 이 리스트를 바탕으로 결혼식에 초대할 사람의 수를 구하는 프로그램을 작성하시오. 입력 첫째 줄에 상근이의 동기의 수 n (2 ≤ n ≤ 500)이 주어진다. 둘째 줄에는 리스트의 길이 m (1 ≤ m www.acmicpc.net 상근이라는 친구가 결혼식에 친구도 초대하고 친구의 친구까지는 초대.. 더보기
백준 알고리즘 1748. 수 이어쓰기 원본문제 링크 https://www.acmicpc.net/problem/1748 1748번: 수 이어 쓰기 1 첫째 줄에 N(1≤N≤100,000,000)이 주어진다. www.acmicpc.net 만약 1 2 3 4 5 6 7 8 9 10 11 12 ... 이렇게 숫자를 계속 써내려갈때 1부터 100까지의 숫자를 하나하나씩 센다면 숫자 갯수는 총 몇개일까요? 예를 들면 12라는 숫자는 1과 2를 각각 세어서 2개로 셉니다. ​ 그러면 총 192개입니다. 어떻게 그렇게 되냐구요?? 0~9 : 9개 10~99 : 90개 X 2자리 = 180개 100 : 1개 X 3자리 = 3개 모두 합치면 192개가 딱 나오지요. ​ 그렇다면 1부터 12345까지 이런 식으로 센다면 숫자 갯수는 몇개나 될까요? 컴퓨터 없이.. 더보기
백준 알고리즘 1934번. 최소공배수 초등학교 산수(요새 말로는 수학) 시간에 "최소공배수"를 구해본 기억이 있으신가요? 기억이 가물가물한 분들이 더욱 많을듯 해서 다시 상기시켜드립니다. ​ 2개의 수의 배수중 가장 작은 수가 바로 최소공배수입니다. 이를 테면 12과 20의 배수이면서 그중 가장 작은 배수는 12x20=240이 아니라, 60인 것이지요. 60이란 숫자는 12의 배수인 동시에 20의 배수이기도 합니다. ​ 이런 최소공배수를 구하는 방법이 있습니다. 알고리즘 풀이로 널리 알려진 유클리드 호제법이란 방법도 있지만, 크레이는 그냥 클래식한 방법으로 설명 및 풀이를 진행하도록 하겠습니다. ​ 수학 시간의 배운 내용을 그대로 펼쳐볼까요? 맨 처음 2개의 숫자를 나란히 씁니다. 두 수를 동시에 나눌수 있는 숫자를 왼쪽에 적어줍니다. 그리.. 더보기
온코더 코딩테스트 13회 참가 후기 지난 13회 온코더 코딩 테스트 대회에 참가해서 2시간동안 문제를 풀긴 했는데 3번 문제는 극악의 난이도라. 단 3사람만 풀었더군요. 크레이는 6위에 머물렀습니다. https://www.oncoder.com/ 온코더 사이트 링크 온코더 개발자 평가 서비스 온코더 www.oncoder.com 온코더에서 온 메일을 보니 문제의 내용에 관해서 언급하지 못하도록 신신당부해서 경험적인 부분만 공유합니다 :) 대체적으로 문제들이 난이도가 있습니다. ​ 기존의 알고리즘을 그대로 사용하는 것보다는 아이디어 문제이고, 아이디어를 잘 내느냐에 따라 성적이 판가름 날 듯하더군요. ​ 1번 문제도 크레이는 아이디어 생각만 하는데 5분 정도 소요되었습니다. ​ 2번문제까지는 50분 안에 풀었지만 3번 문제는 아직도 해법을 모르.. 더보기
백준알고리즘 1149번. RGB거리 풀이 최근에 익힌 동적분할 메모이제이션으로 2번만에 성공했습니다 :) 최대 1000개의 직선으로 늘어선 건물을 빨강, 녹색, 파랑색으로 칠하면서 각 건물당 드는 비용을 최소화하는 경로를 찾는 문제인데요. 각 이어진 건물은 같은 색으로 칠해서는 안되는 제약이 있습니다. ​ 문제링크 https://www.acmicpc.net/problem/1149 ​ 크레이는 동적분할로 풀었습니다. 소스 설명보다는 그냥 원리 설명을 드릴텐데요. 간편화를 위해 빨강은 R, 녹색은 G, 파랑은 B로 표현해보도록 하겠습니다. ​ 1번째 색상을 R로 칠하고, 2번째 이후에는 G, B 로 칠하기 시작하는 경로중 작은 값을 구합니다. 1번째 색상을 G로 칠하고, 2번째 이후에는 R, B 로 칠하기 시작하는 경로중 작은 값을 구합니다. 1번.. 더보기
백준 알고리즘. 팩토리얼 0개 개수 풀이 및 해설 n팩토리얼은 1부터 n까지의 곱을 의미하지요. ​ 예를 들면 10팩토리얼은 1x2x3x4x5x6x7x8x9x10 입니다. 10팩토리얼의 값은 얼마일까요? 3628800 입니다. 그렇다면 20팩토리얼의 값은 얼마일까요? 2432902008176640000 입니다. 컴퓨터가 얼마나 빠른지 이 숫자를 0.001초 이내에 계산합니다. 엄청나지요. ​ 그렇지만 컴퓨터는 계산할 수 있는 자릿수 제한이 있어서 무한정 계산을 할 수 있는 것은 아니고 그 자릿수 이내에서만 계산이 가능합니다. ​ 만약 500팩토리얼을 계산한다면 1x2x3x4x...x500 어마어마한 숫자가 됩니다. 10팩토리얼은 뒤에 붙는 0의 갯수만 2개이고 ( 3628800 ) 20팩토리얼은 뒤에 붙는 0의 갯수가 4개이지만, ( 2432902008.. 더보기
백준 1181번. 단어정렬 문제풀이와 해설 요새 '초라기 습격' 이란 문제를 풀어보고 있는데 시간제한으로 난이도가 장난 아니라서, 이런 저런 고민 아닌 고민을 하고 있습니다. ​ 풀이에 성공하신 분들이 소스를 공개하긴 했지만 크레이는 어디까지나 혼자 힘으로 100% 이해해서 푸는 걸 목적으로 하기 때문에 며칠째 끙끙거리고 있습니다 ㅎㅎ ​ 우선 쉬운 문제 풀어보면서 머리를 좀 식힐겸사~ ​ 단어정렬 문제 링크 주소는 아래와 같습니다. ​ https://www.acmicpc.net/problem/1181 ​ 이번 문제의 목적은 짧은 단어순 정렬, 동일한 글자수라면 알파벳순 정렬, 그리고 중복출력을 제거하는 부분인데요, 아주 간단한 방법으로 해결 가능합니다. ​ 아래와 같은 단어 목록을 메모리에 저장할 때, but i wont hesitate 앞에 .. 더보기
백준 1003 피보나치 함수 문제풀이와 해설 은근히 헷갈리는 문제이긴 했는데, 헤메다가 결국 풀이했습니다 :) ​ 피보나치의 합계를 푸는거라면 좀 수월할텐데, 재귀호출에서 0과 1이 나오는 횟수를 풀라니 크레이에게는 좀 난해했습니다. ​ 피보나치 수열에서 재귀호출로 계산할 때 0과 1이 연산에 들어가는 횟수인지 숫자가 클수록 기하급수적으로 늘어나더라구요. ​ 이것 저것 고민하다가 인터넷 다른 분의 게시글도 참고하긴 했지만, 결국은 독자적으로 초고속으로 작동하도록 새로 만들었습니다. ​ long long 형 변수로 선언해서 60피보나치의 0과 1의 갯수까지도 계산할 수 있으며 ( 79로 시도해봤었는데 숫자 범위 초과로 엉뚱한 숫자가 구해지더라구요. 혼란드린점 죄송합니다 ) 60피보나치일 경우라도 연산시간은 10ms 이내인듯 합니다 :) 측정해보기는 .. 더보기