본문 바로가기

코딩과 알고리즘149

백준 1181번. 단어정렬 문제풀이와 해설 요새 '초라기 습격' 이란 문제를 풀어보고 있는데 시간제한으로 난이도가 장난 아니라서, 이런 저런 고민 아닌 고민을 하고 있습니다. ​ 풀이에 성공하신 분들이 소스를 공개하긴 했지만 크레이는 어디까지나 혼자 힘으로 100% 이해해서 푸는 걸 목적으로 하기 때문에 며칠째 끙끙거리고 있습니다 ㅎㅎ ​ 우선 쉬운 문제 풀어보면서 머리를 좀 식힐겸사~ ​ 단어정렬 문제 링크 주소는 아래와 같습니다. ​ https://www.acmicpc.net/problem/1181 ​ 이번 문제의 목적은 짧은 단어순 정렬, 동일한 글자수라면 알파벳순 정렬, 그리고 중복출력을 제거하는 부분인데요, 아주 간단한 방법으로 해결 가능합니다. ​ 아래와 같은 단어 목록을 메모리에 저장할 때, but i wont hesitate 앞에 .. 2019. 6. 22.
백준 1003 피보나치 함수 문제풀이와 해설 은근히 헷갈리는 문제이긴 했는데, 헤메다가 결국 풀이했습니다 :) ​ 피보나치의 합계를 푸는거라면 좀 수월할텐데, 재귀호출에서 0과 1이 나오는 횟수를 풀라니 크레이에게는 좀 난해했습니다. ​ 피보나치 수열에서 재귀호출로 계산할 때 0과 1이 연산에 들어가는 횟수인지 숫자가 클수록 기하급수적으로 늘어나더라구요. ​ 이것 저것 고민하다가 인터넷 다른 분의 게시글도 참고하긴 했지만, 결국은 독자적으로 초고속으로 작동하도록 새로 만들었습니다. ​ long long 형 변수로 선언해서 60피보나치의 0과 1의 갯수까지도 계산할 수 있으며 ( 79로 시도해봤었는데 숫자 범위 초과로 엉뚱한 숫자가 구해지더라구요. 혼란드린점 죄송합니다 ) 60피보나치일 경우라도 연산시간은 10ms 이내인듯 합니다 :) 측정해보기는 .. 2019. 6. 22.
백준 1012 유기농배추 문제풀이 및 해설 오늘 살펴볼 문제는 1012번입니다 :) 유기농 배추를 심는 한나를 도와 병충해를 막는데 몇마리의 지렁이가 필요한지 알아내는 소스를 짜는 것이군요. ​ 스토리가 있어서 재미있습니다 ㅎㅎ 문제 살펴봅니다~ ​ 문제 차세대 영농인 한나는 강원도 고랭지에서 유기농 배추를 재배하기로 하였다. 농약을 쓰지 않고 배추를 재배하려면 배추를 해충으로부터 보호하는 것이 중요하기 때문에, 한나는 해충 방지에 효과적인 배추흰지렁이를 구입하기로 결심한다. 이 지렁이는 배추근처에 서식하며 해충을 잡아 먹음으로써 배추를 보호한다. 특히, 어떤 배추에 배추흰지렁이가 한 마리라도 살고 있으면 이 지렁이는 인접한 다른 배추로 이동할 수 있어, 그 배추들 역시 해충으로부터 보호받을 수 있다. (한 배추의 상하좌우 네 방향에 다른 배추가.. 2019. 6. 22.
백준 1009 분산처리 문제풀이 및 해설 오늘은 백준 앞번호대 문제를 살펴볼텐데요. 자연수의 기본 원리를 알면 쉽게 풀수 있는 문제이나 모르면 앞번호대일지라도 혼동될 수 있는 문제입니다 :) ​ 문제 한번 살펴볼까요? ​ 문제 재용이는 최신 컴퓨터 10대를 가지고 있다. 어느 날 재용이는 많은 데이터를 처리해야 될 일이 생겨서 각 컴퓨터에 1번부터 10번까지의 번호를 부여하고, 10대의 컴퓨터가 다음과 같은 방법으로 데이터들을 처리하기로 하였다. 1번 데이터는 1번 컴퓨터, 2번 데이터는 2번 컴퓨터, 3번 데이터는 3번 컴퓨터, ... , 10번 데이터는 10번 컴퓨터, 11번 데이터는 1번 컴퓨터, 12번 데이터는 2번 컴퓨터, ... 총 데이터의 개수는 항상 ab개의 형태로 주어진다. 재용이는 문득 마지막 데이터가 처리될 컴퓨터의 번호가 .. 2019. 6. 22.
백준 1011번. Fly me to the Alpha Centauri 우주 여행 알고리즘 문제군요 :) ​ 이 문제는 여러 해법이 존재할 수 있을법 한데요. ​ 크레이에게는 약간 어려운 문제이긴 했으나 다음번에 유사한 패턴이 나오면 훨씬 시간을 단축해서 풀 수 있을듯 합니다. ​ 다른분의 풀이를 참조하긴 했지만 원리만 이해하고 고민하는 방법과 코딩은 새로 했으니까요. ​ 경우의 수까지는 적용하지 않고 반복패턴에 의한 풀이 방법을 적용했습니다. ​ 문제 우현이는 어린 시절, 지구 외의 다른 행성에서도 인류들이 살아갈 수 있는 미래가 오리라 믿었다. 그리고 그가 지구라는 세상에 발을 내려 놓은 지 23년이 지난 지금, 세계 최연소 ASNA 우주 비행사가 되어 새로운 세계에 발을 내려 놓는 영광의 순간을 기다리고 있다. 그가 탑승하게 될 우주선은 Alpha Centauri라는 .. 2019. 6. 22.
백준 알고리즘 3460. 이진수 오늘의 백준 알고리즘 문제 풀이는 3460번입니다. 오늘도 미래의 기술 코딩과 연관된 알고리즘을 공부하시는 분들에게도 도움이 되고자 글 올리는군요 :) ​ 2진수는 컴퓨터가 좋아하는 숫자이지요. 백준 알고리즘에서 제시하는 문제 살펴볼까요? ​ 문제 양의 정수 n이 주어졌을 때, 이를 이진수로 나타냈을 때 1의 위치를 모두 찾는 프로그램을 작성하시오. 최하위 비트(least significant bit, lsb)의 위치는 0이다. ​ 입력 첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있고, n이 주어진다. (1 ≤ T ≤ 10, 1 ≤ n ≤ 106) ​ ​ 출력 각 테스트 케이스에 대해서, 1의 위치를 공백으로 구분해서 줄 하나에 출력한다. 위치가 낮은 것부터 출.. 2019. 6. 20.
백준 알고리즘. 10809번. 알파벳 찾기 문제 알파벳 소문자로만 이루어진 단어 S가 주어진다. 각각의 알파벳에 대해서, 단어에 포함되어 있는 경우에는 처음 등장하는 위치를, 포함되어 있지 않은 경우에는 -1을 출력하는 프로그램을 작성하시오. ​ 입력 첫째 줄에 단어 S가 주어진다. 단어의 길이는 100을 넘지 않으며, 알파벳 소문자로만 이루어져 있다. ​ 출력 각각의 알파벳에 대해서, a가 처음 등장하는 위치, b가 처음 등장하는 위치, ... z가 처음 등장하는 위치를 공백으로 구분해서 출력한다. 만약, 어떤 알파벳이 단어에 포함되어 있지 않다면 -1을 출력한다. 단어의 첫 번째 글자는 0번째 위치이고, 두 번째 글자는 1번째 위치이다. ​ 예제입력 baekjoon 예제출력 1 0 -1 -1 2 -1 -1 -1 -1 4 3 -1 -1 7 5 .. 2019. 6. 20.
백준알고리즘 8958번 풀이 &해설 문제 "OOXXOXXOOO"와 같은 OX퀴즈의 결과가 있다. O는 문제를 맞은 것이고, X는 문제를 틀린 것이다. 문제를 맞은 경우 그 문제의 점수는 그 문제까지 연속된 O의 개수가 된다. 예를 들어, 10번 문제의 점수는 3이 된다. "OOXXOXXOOO"의 점수는 1+2+0+0+1+0+0+1+2+3 = 10점이다. OX퀴즈의 결과가 주어졌을 때, 점수를 구하는 프로그램을 작성하시오. ​ 입력 첫째 줄에 테스트 케이스의 개수가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있고, 길이가 0보다 크고 80보다 작은 문자열이 주어진다. 문자열은 O와 X만으로 이루어져 있다. ​ 출력 각 테스트 케이스마다 점수를 출력한다. ​ 예제입력 5 OOXXOXXOOO OOXXOOXXOO OXOXOXOXOXOXOX .. 2019. 6. 20.
백준 알고리즘 1152. 단어의 개수 풀이 & 해설 문제 영어 대소문자와 띄어쓰기만으로 이루어진 문자열이 주어진다. 이 문자열에는 몇 개의 단어가 있을까? 이를 구하는 프로그램을 작성하시오. 단, 한 단어가 여러 번 등장하면 등장한 횟수만큼 모두 세어야 한다. ​ 입력 첫 줄에 영어 대소문자와 띄어쓰기로 이루어진 문자열이 주어진다. 이 문자열의 길이는 1,000,000을 넘지 않는다. 단어는 띄어쓰기 한 개로 구분되며, 공백이 연속해서 나오는 경우는 없다. 또한 문자열의 앞과 뒤에는 공백이 있을 수도 있다. ​ 출력 첫째 줄에 단어의 개수를 출력한다. ​ 예제입력 예제입력 The Curious Case of Benjamin Button ​ 예제출력 6 해설 한줄을 읽어 단어의 갯수를 세는 문제인데요. 단순히 공백의 갯수를 세어서 1을 더해준다고 생각하기 .. 2019. 6. 20.
백준알고리즘 1065번 문제 풀이 & 해설 문제 ​ 어떤 양의 정수 X의 자리수가 등차수열을 이룬다면, 그 수를 한수라고 한다. 등차수열은 연속된 두 개의 수의 차이가 일정한 수열을 말한다. N이 주어졌을 때, 1보다 크거나 같고, N보다 작거나 같은 한수의 개수를 출력하는 프로그램을 작성하시오. ​ 입력 ​ 첫째 줄에 1,000보다 작거나 같은 자연수 N이 주어진다. ​ 출력 ​ 째 줄에 1보다 크거나 같고, N보다 작거나 같은 한수의 개수를 출력한다. ​ 해설 ​ 본 문제는 등차수열인데 얼핏 알기에는 5, 10, 15, 20과 같은 수열로 착오할 수 있습니다. 문제지문에 보시면, 어떤 정수 X 의 자릿수가 등차수열을 이룬다면 이라고 적혀 있지요. 여기서 자릿수란, 숫자가 1자리인지 2자리 숫자인지, 3 또는 4자리 숫자인지 말하는 것입니다. .. 2019. 6. 20.
아스키 코드표 아스키 코드표를 아시나요? 영어로 스펠링이 ASCII 인데, A 아메리칸, S 스탠다드, C 코드, 포(for), I 인포메이션, I 인터체인지 미국 표준코드 for 정보교환 = 정보교환을 위한 미국표준코드의 약어입니다. ​ 그러다 보니 당연히 영어가 주요문자이며, 각 문자마다 32번 ~ 126번까지의 번호를 붙여 놓았습니다. 10진수 또는 16진수로 보통 이 문자를 표현하는데요. 관련 도표는 아래와 같습니다. ​ ​ 10진수 16진수 문자 10진수 16진수 문자 10진수 16진수 문자 32 0x20 64 0x40 @ 96 0x60 ` 33 0x21 ! 65 0x41 A 97 0x61 a 34 0x22 " 66 0x42 B 98 0x62 b 35 0x23 # 67 0x43 C 99 0x63 c 36 0x.. 2019. 6. 20.
백준 알고리즘 4673번 풀이와 해설 백준 알고리즘 문제 셀프 넘버는 1949년 인도 수학자 D.R. Kaprekar가 이름 붙였다. 양의 정수 n에 대해서 d(n)을 n과 n의 각 자리수를 더하는 함수라고 정의하자. 예를 들어, d(75) = 75+7+5 = 87이다. 양의 정수 n이 주어졌을 때, 이 수를 시작해서 n, d(n), d(d(n)), d(d(d(n))), ...과 같은 무한 수열을 만들 수 있다. 예를 들어, 33으로 시작한다면 다음 수는 33 + 3 + 3 = 39이고, 그 다음 수는 39 + 3 + 9 = 51, 다음 수는 51 + 5 + 1 = 57이다. 이런식으로 다음과 같은 수열을 만들 수 있다. 33, 39, 51, 57, 69, 84, 96, 111, 114, 120, 123, 129, 141, ... n을 d(.. 2019. 6. 20.