문제 URL: www.acmicpc.net/problem/1193 1193번: 분수찾기 첫째 줄에 X(1 ≤ X ≤ 10,000,000)가 주어진다. www.acmicpc.net 다음 문제는 나열된 분수들을 지그재그 순서로 번호를 붙여 X가 주어졌을 때, X번째 분수를 구하는 프로그램이다. 이 문제에서 번호를 붙인 분수들이 지그재그 형태로 즉, 대각선을 기준으로 분수의 개수가 증가하기 때문에 문제를 풀기 위해 먼저 반복문을 통해 x번째에 해당하는 분수가 몇 번째 대각선에 존재하는지 구해주었다. count변수에 x분수가 몇 번째 대각선에 존재하는지 저장하고 난 뒤에는 while문을 빠져나온 x변수를 이용하여 분모와 분자를 각각 구해주고 원하는 결괏값을 출력했다. 하나 주의 했어야 할 점은, 처음에 풀 때 ..
문제 URL: www.acmicpc.net/problem/2292 2292번: 벌집 위의 그림과 같이 육각형으로 이루어진 벌집이 있다. 그림에서 보는 바와 같이 중앙의 방 1부터 시작해서 이웃하는 방에 돌아가면서 1씩 증가하는 번호를 주소로 매길 수 있다. 숫자 N이 주어졌 www.acmicpc.net 다음 문제는 벌집의 중앙 1에서 N번 방까지 최소 개수의 방을 지나서 갈 때 몇 개의 방을 지나가는지 (시작과 끝을 포함하여)를 계산하는 문제이다. 이 문제는 벌집이 일정한 숫자(6의 배수)만큼 증가하기 때문에 그 점을 이용하여 문제를 풀었다. 반복문 안에서 벌집이 증가한 수만큼 빼주는 코드를 작성하고, n이 0이나 음수가 되기 전까지 반복문을 돌려 최소 개수의 방을 count에 저장해주었다. #inclu..
문제 URL: www.acmicpc.net/problem/15596 15596번: 정수 N개의 합 C++17, Java 8, Python 3, C11, PyPy3, C99, C++98, C++11, C++14, Python 2, PyPy2, Go, C99 (Clang), C++98 (Clang), C++11 (Clang), C++14 (Clang), C11 (Clang), C++17 (Clang) www.acmicpc.net 다음 문제는 정수 n개가 주어졌을 때, n개의 합을 구하는 함수를 작성하는 문제로 이 문제는 벡터를 이용하여 간단하게 풀 수 있는다. 풀이 코드는 아래와 같다. +) 함수에서 벡터를 인수로 받는 문제들을 풀 때, (물론 이전에 왜 참조에 의한 전달을 하는지 배웠겠지만) 기계적으로 함..
문제 URL: www.acmicpc.net/problem/5622 5622번: 다이얼 첫째 줄에 알파벳 대문자로 이루어진 단어가 주어진다. 단어의 길이는 2보다 크거나 같고, 15보다 작거나 같다. www.acmicpc.net 다음 문제는 알파벳 대문자로 이루어진 단어가 주어지면, 다이얼을 걸기 위해서 필요한 최소 시간을 출력하는 문제이다. 이 문제를 풀기 위해 함수를 사용하였는데, tel함수 안에서 각 문자마다 해당되는 아스키코드를 이용해 조건을 나누어주었다. main함수에서 문자열을 입력받은 뒤 tel함수를 호출하면, tel함수에서 문자열의 각 요소마다 해당되는 시간을 반환하고, 이 반환값들을 모두 더해주어 최소 시간을 얻을 수 있다. 위 과정을 거친 코드는 아래와 같다. #include #inclu..
문제 URL: www.acmicpc.net/problem/2941 2941번: 크로아티아 알파벳 예전에는 운영체제에서 크로아티아 알파벳을 입력할 수가 없었다. 따라서, 다음과 같이 크로아티아 알파벳을 변경해서 입력했다. 크로아티아 알파벳 변경 č c= ć c- dž dz= đ d- lj lj nj nj š s= ž z= www.acmicpc.net 다음 문제는 단어가 주어졌을 때, 몇 개의 크로아티아 알파벳으로 이루어져 있는지 출력하는 문제로, 프로그램 내에서 크로아티아 알파벳은 아래 표의 변경과 같이 입력한다. 크로아티아 알파벳 변경 č c= ć c- dž dz= đ d- lj lj nj nj š s= ž z= (dž는 무조건 하나의 알파벳으로 쓰이고, d와 ž가 분리된 것으로 보지 않는다. lj와 n..
문제 URL: www.acmicpc.net/problem/4673 4673번: 셀프 넘버 셀프 넘버는 1949년 인도 수학자 D.R. Kaprekar가 이름 붙였다. 양의 정수 n에 대해서 d(n)을 n과 n의 각 자리수를 더하는 함수라고 정의하자. 예를 들어, d(75) = 75+7+5 = 87이다. 양의 정수 n이 주어졌을 때, www.acmicpc.net 다음 문제는 10000보다 작거나 같은 셀프 넘버를 한 줄에 하나씩 출력하는 문제로, 셀프 넘버의 정의는 위 링크 속 문제에 자세히 설명되어있다. 이 문제는 배열과 함수를 이용하여 풀었다. 먼저 non_self 함수를 만들고, non_self 함수를 통해 셀프 넘버가 아닌 숫자를 반환하여 main함수에서 이 숫자가 들어있는 배열의 값을 0으로 만들..
문제 URL: www.acmicpc.net/problem/2908 2908번: 상수 상근이의 동생 상수는 수학을 정말 못한다. 상수는 숫자를 읽는데 문제가 있다. 이렇게 수학을 못하는 상수를 위해서 상근이는 수의 크기를 비교하는 문제를 내주었다. 상근이는 세 자리 수 두 www.acmicpc.net 다음 문제는 입력받은 두 수를 역순으로 만들어 준 뒤, 만들어진 두 수를 비교하여 큰 값을 출력하는 문제로 함수를 사용하여 문제를 풀었다. reverse함수는 입력받은 문자열을 역순으로 바꾸어 새로운 문자열을 만드는 함수로, 새로운 문자열을 반환해야하므로 함수의 반환값은 string이다. main함수에서 두 수를 입력하고, reverse함수가 입력받은 두 수에 대해 역순으로 된 새로운 문자열을 반환하면 반환된..
문제 URL: www.acmicpc.net/problem/1157 1157번: 단어 공부 알파벳 대소문자로 된 단어가 주어지면, 이 단어에서 가장 많이 사용된 알파벳이 무엇인지 알아내는 프로그램을 작성하시오. 단, 대문자와 소문자를 구분하지 않는다. www.acmicpc.net 다음 문제는 알파벳 대소문자로 된 단어가 주어지면, 이 단어에서 가장 많이 사용된 알파벳이 무엇인지 알아내는 프로그램으로 첫째 줄에 알파벳 대소문자로 이루어진 단어가 주어지면, 이 단어에서 가장 많이 사용된 알파벳을 대문자로 출력해준다. 단, 가장 많이 사용된 알파벳이 여러 개 존재하는 경우에는 ?를 출력한다. 이 문제를 풀기위해 프로그램을 세 단계로 구상했는데, 그 단계는 아래와 같다. 1. 단어 즉 문자열을 모두 대문자로 바꾸..
문제 URL: www.acmicpc.net/problem/2675 2675번: 문자열 반복 문자열 S를 입력받은 후에, 각 문자를 R번 반복해 새 문자열 P를 만든 후 출력하는 프로그램을 작성하시오. 즉, 첫 번째 문자를 R번 반복하고, 두 번째 문자를 R번 반복하는 식으로 P를 만들면 된다 www.acmicpc.net 다음 문제는 문자열 S를 입력받은 후에, 각 문자를 R번 반복해 출력하는 프로그램이다. 이 문제는 문자열을 입력받고 그 문자열의 요소를 at() 함수를 이용하여 반복해서 출력하는 방식으로 풀었는데, 먼저 문자열의 개수인 t와 문자열 s를 입력받았다. 그 다음으로 변수 n을 만들어 반복문 속 조건문을 통해 각 요소를 r번 반복하고, r번 반복을 마치면 반복문을 빠져나오도록 프로그래밍 하였다..
문제 URL: www.acmicpc.net/problem/10809 10809번: 알파벳 찾기 각각의 알파벳에 대해서, a가 처음 등장하는 위치, b가 처음 등장하는 위치, ... z가 처음 등장하는 위치를 공백으로 구분해서 출력한다. 만약, 어떤 알파벳이 단어에 포함되어 있지 않다면 -1을 출 www.acmicpc.net 다음 문제는 알파벳 소문자로만 이루어진 단어 S가 주어지면, 각각의 알파벳에 대해서 단어에 포함되어 있는 경우에는 처음 등장하는 위치를, 포함되어 있지 않은 경우에는 -1을 출력하는 프로그램을 작성하는 문제이다. 이 문제를 풀기 위해 먼저 'a'에 해당하는 아스키코드를 찾은 뒤 변수 asc에 입력해놓고, asc를 문자형 변수 al에 다시 대입해주었다. 이 과정을 거치면 변수 al에는 ..