11656. 접미사배열 접미사 배열은 문자열 S의 모든 접미사를 사전순으로 정렬해 놓은 배열이다. baekjoon의 접미사는 baekjoon, aekjoon, ekjoon, kjoon, joon, oon, on, n 으로 총 8가지가 있고, 이를 사전순으로 정렬하면, aekjoon, baekjoon, ekjoon, joon, kjoon, n, on, oon이 된다. 문자열 S가 주어졌을 때, 모든 접미사를 사전순으로 정렬한 다음 출력하는 프로그램을 작성하시오. 입력. 첫째 줄에 문자열 S가 주어진다. S는 알파벳 소문자로만 이루어져 있고, 길이는 1,000보다 작거나 같다. 출력. 첫째 줄부터 S의 접미사를 사전순으로 한 줄에 하나씩 출력한다. Python import sys str = sys.stdin..
10820. 문자열 분석 문자열 N개가 주어진다. 이때, 문자열에 포함되어 있는 소문자, 대문자, 숫자, 공백의 개수를 구하는 프로그램을 작성하시오. 각 문자열은 알파벳 소문자, 대문자, 숫자, 공백으로만 이루어져 있다. 입력. 첫째 줄부터 N번째 줄까지 문자열이 주어진다. (1 ≤ N ≤ 100) 문자열의 길이는 100을 넘지 않는다. 출력. 첫째 줄부터 N번째 줄까지 각각의 문자열에 대해서 소문자, 대문자, 숫자, 공백의 개수를 공백으로 구분해 출력한다. Python while True : try : case = list(input()) lower, upper, digit, space = 0,0,0,0 for c in case : if c == " " : space += 1 elif c.isdigit..
문제 설명 Leo는 카펫을 사러 갔다가 아래 그림과 같이 중앙에는 노란색으로 칠해져 있고 테두리 1줄은 갈색으로 칠해져 있는 격자 모양 카펫을 봤습니다. Leo는 집으로 돌아와서 아까 본 카펫의 노란색과 갈색으로 색칠된 격자의 개수는 기억했지만, 전체 카펫의 크기는 기억하지 못했습니다. Leo가 본 카펫에서 갈색 격자의 수 brown, 노란색 격자의 수 yellow가 매개변수로 주어질 때 카펫의 가로, 세로 크기를 순서대로 배열에 담아 return 하도록 solution 함수를 작성해주세요. 제한사항 갈색 격자의 수 brown은 8 이상 5,000 이하인 자연수입니다. 노란색 격자의 수 yellow는 1 이상 2,000,000 이하인 자연수입니다. 카펫의 가로 길이는 세로 길이와 같거나, 세로 길이보다 ..
문제 설명 한자리 숫자가 적힌 종이 조각이 흩어져있습니다. 흩어진 종이 조각을 붙여 소수를 몇 개 만들 수 있는지 알아내려 합니다. 각 종이 조각에 적힌 숫자가 적힌 문자열 numbers가 주어졌을 때, 종이 조각으로 만들 수 있는 소수가 몇 개인지 return 하도록 solution 함수를 완성해주세요. 제한사항 numbers는 길이 1 이상 7 이하인 문자열입니다. numbers는 0~9까지 숫자만으로 이루어져 있습니다. "013"은 0, 1, 3 숫자가 적힌 종이 조각이 흩어져있다는 의미입니다. 입출력 첫 번째 입력의 1과 7로 얻을 수 있는 숫자의 조합은 [ 1, 7, 17, 71 ]이다. 이때, 소수는 7, 17, 71 총 3개이므로 3을 반환한다 두 번째 입력의 0과 1, 1로 얻을 수 있는 ..
10809. 알파벳 찾기 알파벳 소문자로만 이루어진 단어 S가 주어진다. 각각의 알파벳에 대해서, 단어에 포함되어 있는 경우에는 처음 등장하는 위치를 포함되어 있지 않은 경우에는 -1을 출력하는 프로그램을 작성하시오. 입력. 첫째 줄에 단어 S가 주어진다. 단어의 길이는 100을 넘지 않으며, 알파벳 소문자로만 이루어져 있다. 출력. 각각의 알파벳에 대해서, a가 처음 등장하는 위치, b가 처음 등장하는 위치, ... z가 처음 등장하는 위치를 공백으로 구분해서 출력한다. 만약, 어떤 알파벳이 단어에 포함되어 있지 않다면 -1을 출력한다. 단어의 첫 번째 글자는 0번째 위치이고, 두 번째 글자는 1번째 위치이다. 풀이. 알파벳의 개수만큼의 크기를 갖는 배열을 선언하고, 해당 알파벳이 있다면 index를 ..
순열 : permutation ✔️ 순열이란 주어진 숫자 중 n개를 골라 순서를 고려해 나열한 경우의 수를 말한다 ✔️ 즉, 서로 다른 n 개 중 r 개를 골라 순서를 정해 나열하는 가짓수이다 ✔️ 그리고 순열은 ‘Permutation’의 첫 글자 P를 따서 nPr로 표시한다 예를 들어 조별 활동을 위해 같은 조가 된 A, B, C 세 명의 학생 중 조장과 부조장을 뽑으려 한다 조장과 부조장을 뽑는 데 모두 몇 가지 경우의 수가 있을까? A, B 두 사람을 뽑는다면 순서에 따라 (A, B)가 될 수도 있고 (B, A)가 될 수도 있다 (A, B)에서는 A는 조장, B가 부조장의 역할을 맡는다. 반면 (B, A)에서는 B가 조장의 역할을, A가 부조장의 역할을 맡는다. 둘은 엄연히 다르다. 이를 통해 순열..
제곱근의 이용 n의 약수는 무조건 1 ~ √n의 범위에 존재한다. ✔️ 소수인지를 확인할 숫자 n의 제곱근 √n을 기준으로 약수끼리의 곱은 대칭으로 이루어진다 ✔️ 그렇기 때문에 √n 이하의 작은 값까지만 검사를 하면 나머지는 검사를 할 필요가 없다 예를 들어 n = 18이라면, 18의 약수는 1, 2, 3, 6, 9, 18이다 이 때 n의 제곱근인 √18은 약 4.242이며, 이를 기준으로 약수의 순서를 보면 아래와 같다 (1 x 18) (2 x 9) (3 x 6) √18 = 4.242 (6 x 3) (9 x 2) (18 x 1) ✔️ 제곱근을 기준으로 좌우의 연산이 대칭되는 형상을 가진다 (예) (3 x 6) √18 (6 x 3) ✔️ 그렇기 때문에 제곱근과 같거나 작은 숫자로 나누어지면, 그 이후는..
에라토스테네스의 체(Sieve of Eratosthenes) 에라토스테네스의 체(Sieve of Eratosthenes)는 1~N까지의 범위 내 소수를 모두 구하기 위한 방법이다 범위내의 자연수를 걸러내어 소수를 구하는 방법으로, 에라토스테네스의 체 라는 이름이 붙여졌다 1부터 40까지의 수 중 소수를 구해보며 에라토스테네스의 체 방법에 대해 알아보자 먼저 1부터 40까지의 숫자를 위와 같이 나열한다 소수란 1과 자기 자신만을 약수로 갖는 수를 말한다. 1은 소수에 해당하지 않으므로 지운다 모든 수가 1의 배수이므로 1의 배수를 걸러내는 과정은 생략한다 순서대로 하나하나 확인해 나가면 되는데, 자기 자신을 제외한 배수를 모두 지운다. 2를 제외한 2의 배수를 모두 지운다 그다음 숫자인 3을 확인한다. 3..
문제 설명 수포자는 수학을 포기한 사람의 준말입니다. 수포자 삼인방은 모의고사에 수학 문제를 전부 찍으려 합니다. 수포자는 1번 문제부터 마지막 문제까지 다음과 같이 찍습니다. 1번 수포자가 찍는 방식: 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, ... 2번 수포자가 찍는 방식: 2, 1, 2, 3, 2, 4, 2, 5, 2, 1, 2, 3, 2, 4, 2, 5, ... 3번 수포자가 찍는 방식: 3, 3, 1, 1, 2, 2, 4, 4, 5, 5, 3, 3, 1, 1, 2, 2, 4, 4, 5, 5, ... 1번 문제부터 마지막 문제까지의 정답이 순서대로 들은 배열 answers가 주어졌을 때, 가장 많은 문제를 맞힌 사람이 누구인지 배열에 담아 return 하도록 solution 함수를 작..
10808. 알파벳 개수 알파벳 소문자로만 이루어진 단어 S가 주어진다. 각 알파벳이 단어에 몇 개가 포함되어 있는지 구하는 프로그램을 작성하시오. 입력. 첫째 줄에 단어 S가 주어진다. 단어의 길이는 100을 넘지 않으며, 알파벳 소문자로만 이루어져 있다. 출력. 단어에 포함되어 있는 a의 개수, b의 개수, …, z의 개수를 공백으로 구분해서 출력한다. 풀이. 알파벳의 개수만큼의 크기를 갖는 배열을 선언하고, 해당 알파벳이 있다면 +1 해준다 Python import sys word = sys.stdin.readline().rstrip() # 입력 받기 alpha = [0] * (ord('z') - ord('a') + 1) # 사용한 알파벳의 개수를 저장할 배열 + 0으로 초기화 # 단어의 알파벳을 ..