본문 바로가기
32. 최대공약수와 최소공배수(2609) 문제.두 개의 자연수를 입력받아 최대 공약수와 최소 공배수를 출력하는 프로그램을 작성하시오.답:import matha, b = map(int, input().split())print(math.gcd(a, b)) #최대공약수를 찾는 함수print(math.lcm(a, b)) #최소공배수를 찾는 함수문제에서 제시한 그대로 최대공약수와 최소공배수를 찾기 위하고 싶다면 "파이썬 내장 함수"를 이용해서 쉽게 풀 수 있다.먼저 math를 임포트를 해준다. 이후 a, b를 input를 받는다.이후 파이썬에 내장된 수학 함수를 이용한다.gcd는 최대공약수를 찾는 함수이고, lcm은 최소공배수를 찾는 함수이다.참고로 최대공약수는 두 수의 공통인 약수 중 가장 큰 자연수를 말하고, 최소공배수는 두 수의 공통인 배수 중 가.. 2024. 9. 28.
31. 나머지(10430) 문제.(A+B)%C는 ((A%C) + (B%C))%C 와 같을까?(A×B)%C는 ((A%C) × (B%C))%C 와 같을까?세 수 A, B, C가 주어졌을 때, 위의 네 가지 값을 구하는 프로그램을 작성하시오.답:A, B, C = map(int, input().split())print((A+B)%C)print(((A%C)+(B%C))%C)print((A*B)%C)print(((A%C)*(B%C))%C)a,b,c을 입력받는다. map함수를 이용하면 한 줄에 다 받을 수 있다.이후 문제에서 제시한대로 print문을 구현해주면 된다. 굉장히 쉬운 문제이다! 2024. 9. 27.
30. 접미사 배열(11656) 문제.접미사 배열은 문자열 S의 모든 접미사를 사전순으로 정렬해 놓은 배열이다.baekjoon의 접미사는 baekjoon, aekjoon, ekjoon, kjoon, joon, oon, on, n 으로 총 8가지가 있고, 이를 사전순으로 정렬하면, aekjoon, baekjoon, ekjoon, joon, kjoon, n, on, oon이 된다.문자열 S가 주어졌을 때, 모든 접미사를 사전순으로 정렬한 다음 출력하는 프로그램을 작성하시오.답:s = input()answer = []for i in range(len(s)): answer.append(s[i:])answer.sort()for i in answer: print(i)어떻게 input()으로 받은 문자열의 맨 앞 글자 한 자씩 빼서 저장.. 2024. 9. 23.
29. 네 수(10824) 문제.네 자연수 A, B, C, D가 주어진다. 이때, A와 B를 붙인 수와 C와 D를 붙인 수의 합을 구하는 프로그램을 작성하시오.두 수 A와 B를 합치는 것은 A의 뒤에 B를 붙이는 것을 의미한다. 즉, 20과 30을 붙이면 2030이 된다.답:a, b, c, d = input().split()a = a+bc = c+dprint(int(a)+int(c))너무 쉽다.일단 input을 a, b, c, d 다 받아준다. 그냥 받으면 문자열로 받는다는 것을 기억하자.이후a에 a와 b를 합치게 만든다. (더 정확히 표현하자면 "붙인다"가 된다.) 어차피 문자열로 취급을 하기에, 예를 들어 a가 10이고 b가 20이라면 10과 20을 문자열처럼 합치게 되어서 1020이 된다.c도 똑같다.이후 다 합쳐진 문자열 .. 2024. 9. 22.
28. ROT13(11655) 문제.ROT13은 카이사르 암호의 일종으로 영어 알파벳을 13 글자씩 밀어서 만든다.예를 들어, "Baekjoon Online Judge"를 ROT13으로 암호화하면 "Onrxwbba Bayvar Whqtr"가 된다. ROT13으로 암호화한 내용을 원래 내용으로 바꾸려면 암호화한 문자열을 다시 ROT13하면 된다. 앞에서 암호화한 문자열 "Onrxwbba Bayvar Whqtr"에 다시 ROT13을 적용하면 "Baekjoon Online Judge"가 된다.ROT13은 알파벳 대문자와 소문자에만 적용할 수 있다. 알파벳이 아닌 글자는 원래 글자 그대로 남아 있어야 한다. 예를 들어, "One is 1"을 ROT13으로 암호화하면 "Bar vf 1"이 된다.문자열이 주어졌을 때, "ROT13"으로 암호화한.. 2024. 9. 20.
27. 문자열 분석(10820), 단어 길이 재기(2743) 문제. 문자열 N개가 주어진다. 이때, 문자열에 포함되어 있는 소문자, 대문자, 숫자, 공백의 개수를 구하는 프로그램을 작성하시오.각 문자열은 알파벳 소문자, 대문자, 숫자, 공백으로만 이루어져 있다.첫째 줄부터 N번째 줄까지 문자열이 주어진다. (1 ≤ N ≤ 100) 문자열의 길이는 100을 넘지 않는다.첫째 줄부터 N번째 줄까지 각각의 문자열에 대해서 소문자, 대문자, 숫자, 공백의 개수를 공백으로 구분해 출력한다.답:while True: try: #예외 구문 string = input() answer = [0] * 4 for s in string: if s.islower(): answer[0] += 1 .. 2024. 9. 15.
26. 알파벳 개수(10808), 알파벳 찾기(10809) 문제.알파벳 소문자로만 이루어진 단어 S가 주어진다. 각 알파벳이 단어에 몇 개가 포함되어 있는지 구하는 프로그램을 작성하시오.첫째 줄에 단어 S가 주어진다. 단어의 길이는 100을 넘지 않으며, 알파벳 소문자로만 이루어져 있다.단어에 포함되어 있는 a의 개수, b의 개수, …, z의 개수를 공백으로 구분해서 출력한다.답:arr=input()cnt=[0]*26for i in arr: cnt[ord(i)-97]+=1print(*cnt) 이 파이썬 코드는 입력된 문자열에서 각 소문자 알파벳('a'부터 'z'까지)이 몇 번씩 등장하는지를 계산하여 그 결과를 출력하는 역할을 한다. arr = input():사용자로부터 문자열을 입력받는다. 이 문자열은 arr 변수에 저장된다.cnt = [0] * 26:길이.. 2024. 9. 14.
25. 후기표기식2(1935), 후기표기식(1918) 문제. 후위 표기식과 각 피연산자에 대응하는 값들이 주어져 있을 때, 그 식을 계산하는 프로그램을 작성하시오.입력첫째 줄에 피연산자의 개수(1 ≤ N ≤ 26) 가 주어진다. 그리고 둘째 줄에는 후위 표기식이 주어진다. (여기서 피연산자는 A~Z의 영대문자이며, A부터 순서대로 N개의 영대문자만이 사용되며, 길이는 100을 넘지 않는다) 그리고 셋째 줄부터 N+2번째 줄까지는 각 피연산자에 대응하는 값이 주어진다. 3번째 줄에는 A에 해당하는 값, 4번째 줄에는 B에 해당하는값 , 5번째 줄에는 C ...이 주어진다, 그리고 피연산자에 대응 하는 값은 100보다 작거나 같은 자연수이다.후위 표기식을 앞에서부터 계산했을 때, 식의 결과와 중간 결과가 -20억보다 크거나 같고, 20억보다 작거나 같은 입력만.. 2024. 9. 13.
24. 오등큰수(17299) 문제. 크기가 N인 수열 A = A1, A2, ..., AN이 있다. 수열의 각 원소 Ai에 대해서 오등큰수 NGF(i)를 구하려고 한다.Ai가 수열 A에서 등장한 횟수를 F(Ai)라고 했을 때, Ai의 오등큰수는 오른쪽에 있으면서 수열 A에서 등장한 횟수가 F(Ai)보다 큰 수 중에서 가장 왼쪽에 있는 수를 의미한다. 그러한 수가 없는 경우에 오등큰수는 -1이다.예를 들어, A = [1, 1, 2, 3, 4, 2, 1]인 경우 F(1) = 3, F(2) = 2, F(3) = 1, F(4) = 1이다. A1의 오른쪽에 있으면서 등장한 횟수가 3보다 큰 수는 없기 때문에, NGF(1) = -1이다. A3의 경우에는 A7이 오른쪽에 있으면서 F(A3=2) 답:from collections import Cou.. 2024. 9. 12.
23. 쇠막대기(10799), 오큰수(17298) 문제. 여러 개의 쇠막대기를 레이저로 절단하려고 한다. 효율적인 작업을 위해서 쇠막대기를 아래에서 위로 겹쳐 놓고, 레이저를 위에서 수직으로 발사하여 쇠막대기들을 자른다. 쇠막대기와 레이저의 배치는 다음 조건을 만족한다.쇠막대기는 자신보다 긴 쇠막대기 위에만 놓일 수 있다. - 쇠막대기를 다른 쇠막대기 위에 놓는 경우 완전히 포함되도록 놓되, 끝점은 겹치지 않도록 놓는다. 각 쇠막대기를 자르는 레이저는 적어도 하나 존재한다. 레이저는 어떤 쇠막대기의 양 끝점과도 겹치지 않는다.아래 그림은 위 조건을 만족하는 예를 보여준다. 수평으로 그려진 굵은 실선은 쇠막대기이고, 점은 레이저의 위치, 수직으로 그려진 점선 화살표는 레이저의 발사 방향이다.답:n= input()stack=[]cnt = 0for i in .. 2024. 9. 11.
22. 덱(10866) ,단어 뒤집기2(17413) 문제.정수를 저장하는 덱(Deque)를 구현한 다음, 입력으로 주어지는 명령을 처리하는 프로그램을 작성하시오.명령은 총 여덟 가지이다.push_front X: 정수 X를 덱의 앞에 넣는다.push_back X: 정수 X를 덱의 뒤에 넣는다.pop_front: 덱의 가장 앞에 있는 수를 빼고, 그 수를 출력한다. 만약, 덱에 들어있는 정수가 없는 경우에는 -1을 출력한다.pop_back: 덱의 가장 뒤에 있는 수를 빼고, 그 수를 출력한다. 만약, 덱에 들어있는 정수가 없는 경우에는 -1을 출력한다.size: 덱에 들어있는 정수의 개수를 출력한다.empty: 덱이 비어있으면 1을, 아니면 0을 출력한다.front: 덱의 가장 앞에 있는 정수를 출력한다. 만약 덱에 들어있는 정수가 없는 경우에는 -1을 출력.. 2024. 9. 8.
21. 큐(10845) ,조세퍼스 문제(1158) 문제. 정수를 저장하는 큐를 구현한 다음, 입력으로 주어지는 명령을 처리하는 프로그램을 작성하시오.명령은 총 여섯 가지이다.push X: 정수 X를 큐에 넣는 연산이다.pop: 큐에서 가장 앞에 있는 정수를 빼고, 그 수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다.size: 큐에 들어있는 정수의 개수를 출력한다.empty: 큐가 비어있으면 1, 아니면 0을 출력한다.front: 큐의 가장 앞에 있는 정수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다.back: 큐의 가장 뒤에 있는 정수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다.첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에.. 2024. 9. 7.
20. 스택 수열 (1874), 에디터(1406) 문제.스택 (stack)은 기본적인 자료구조 중 하나로, 컴퓨터 프로그램을 작성할 때 자주 이용되는 개념이다. 스택은 자료를 넣는 (push) 입구와 자료를 뽑는 (pop) 입구가 같아 제일 나중에 들어간 자료가 제일 먼저 나오는 (LIFO, Last in First out) 특성을 가지고 있다.1부터 n까지의 수를 스택에 넣었다가 뽑아 늘어놓음으로써, 하나의 수열을 만들 수 있다. 이때, 스택에 push 하는 순서는 반드시 오름차순을 지키도록 한다고 하자. 임의의 수열이 주어졌을 때 스택을 이용해 그 수열을 만들 수 있는지 없는지, 있다면 어떤 순서로 push와 pop 연산을 수행해야 하는지를 알아낼 수 있다. 이를 계산하는 프로그램을 작성하라.첫 줄에 n (1 ≤ n ≤ 100,000)이 주어진다. .. 2024. 9. 6.
19. 괄호 (9012) 문제.괄호 문자열(Parenthesis String, PS)은 두 개의 괄호 기호인 ‘(’ 와 ‘)’ 만으로 구성되어 있는 문자열이다. 그 중에서 괄호의 모양이 바르게 구성된 문자열을 올바른 괄호 문자열(Valid PS, VPS)이라고 부른다. 한 쌍의 괄호 기호로 된 “( )” 문자열은 기본 VPS 이라고 부른다. 만일 x 가 VPS 라면 이것을 하나의 괄호에 넣은 새로운 문자열 “(x)”도 VPS 가 된다. 그리고 두 VPS x 와 y를 접합(concatenation)시킨 새로운 문자열 xy도 VPS 가 된다. 예를 들어 “(())()”와 “((()))” 는 VPS 이지만 “(()(”, “(())()))” , 그리고 “(()” 는 모두 VPS 가 아닌 문자열이다. 여러분은 입력으로 주어진 괄호 문자열.. 2024. 9. 5.
18. 단어 뒤집기(9093) 문제.문장이 주어졌을 때, 단어를 모두 뒤집어서 출력하는 프로그램을 작성하시오. 단, 단어의 순서는 바꿀 수 없다. 단어는 영어 알파벳으로만 이루어져 있다.첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있으며, 문장이 하나 주어진다. 단어의 길이는 최대 20, 문장의 길이는 최대 1000이다. 단어와 단어 사이에는 공백이 하나 있다.각 테스트 케이스에 대해서, 입력으로 주어진 문장의 단어를 모두 뒤집어 출력한다.답:n = int(input())for i in range(n): s = list(input().split()) for j in s: print(j[::-1], end=' ') '''전체 설명'''# a = ['a', 'b', 'c', 'd',.. 2024. 9. 4.
17. 스택(10828) 스택을 풀기 전, 스택이 무엇인지 짧게 배우고, 이 부분을 코드로 구현해보자. (구글링은 사랑입니다. 구글링 없이 자신이 직접 바로 코드를 노베이스로 짤 수 있다면, 아마 당신은 천재일 것이다.)스택이란 일종의 "그릇"이다. 그릇에는 데이터가 저장되어 있고, push나 pop을 이용해 데이터를 삽입하거나 뺄 수 있게 된다. 또한 가장 마지막에 들어간 데이터가 가장 처음 나오는 성질을 가지고 있는 자료구조이다.재귀적인 함수, 알고리즘에 사용되며, 웹 브라우저 방문 기록등에도 사용이 된다. 삽입 및 삭제에 O(1), 탐색에 O(n)이 걸리는 시간 복잡도를 가지고 있다.이런 자료들을 로우적인 부분부터 제어하고 싶으면 c언어를 써주면 된다. 그러나 난 백준을 파이썬 언어로 설정해두고 풀어왔으니, 일단은 파이썬으.. 2024. 9. 2.
16. [12단계] 제목: 브루트 포스 (5~6챕터) 5단계. 종말의 수란 어떤 수에 6이 적어도 3개 이상 연속으로 들어가는 수를 말한다. 제일 작은 종말의 수는 666이고, 그 다음으로 큰 수는 1666, 2666, 3666, .... 이다. 따라서, 숌은 첫 번째 영화의 제목은 "세상의 종말 666", 두 번째 영화의 제목은 "세상의 종말 1666"와 같이 이름을 지을 것이다. 일반화해서 생각하면, N번째 영화의 제목은 세상의 종말 (N번째로 작은 종말의 수) 와 같다.숌이 만든 N번째 영화의 제목에 들어간 수를 출력하는 프로그램을 작성하시오.첫째 줄에 N이 주어진다. N은 10,000보다 작거나 같은 자연수이다.첫째 줄에 N번째 영화의 제목에 들어간 수를 출력한다.답:n = int(input())theEndNumber = 666 #종말번호count .. 2024. 8. 29.
15. [12단계] 제목: 브루트 포스 (3~4챕터) 3단계. 정수 a, b, c, d, e, f가 공백으로 구분되어 차례대로 주어진다.문제의 답인 x와 y를 공백으로 구분해 출력한다.답: a, b, c, d, e, f = map(int, input().split())print((c*e-b*f)//(a*e-b*d), (a*f-d*c)//(a*e-b*d))x와 y를 구하려면 연립방정식을 구하면 된다. 구하는 법은 되게 쉽다. x를 구하고 싶으면 y값을 동일하게 만들고 빼주면 되며, y를 구하고 싶으면 x값을 동일하게 만들어주고 빼면 된다. 어차피 정수들은 숫자로 입력이 될 것이라 상관없다.(참고로 for문을 돌리는 방법이 있지만, 이렇게 푸는 게 더 쉽고 효율적)4단계. 지민이는 자신의 저택에서 MN개의 단위 정사각형으로 나누어져 있는 M×N 크기의 보드를 .. 2024. 8. 28.
14. [12단계] 제목: 브루트 포스 (1~2챕터) 브루트 포스에 대한 공부는 다음 포스팅을 참고하자.https://codingworld2002.tistory.com/107 브루트 포스 알고리즘백준 문제를 풀기 전에, "브루트 포스" 알고리즘에 대한 공부를 선행하였다.브루트 포스(brute force)brute: 무식한, force: 힘   무식한 힘으로 해석할 수 있다.완전탐색 알고리즘. 즉, 가능한 모든 경codingworld2002.tistory.com1단계. 딜러는 N장의 카드를 모두 숫자가 보이도록 바닥에 놓는다. 그런 후에 딜러는 숫자 M을 크게 외친다.이제 플레이어는 제한된 시간 안에 N장의 카드 중에서 3장의 카드를 골라야 한다. 블랙잭 변형 게임이기 때문에, 플레이어가 고른 카드의 합은 M을 넘지 않으면서 M과 최대한 가깝게 만들어야 한다.. 2024. 8. 27.
브루트 포스 알고리즘 백준 문제를 풀기 전에, "브루트 포스" 알고리즘에 대한 공부를 선행하였다.브루트 포스(brute force)brute: 무식한, force: 힘   무식한 힘으로 해석할 수 있다.완전탐색 알고리즘. 즉, 가능한 모든 경우의 수를 모두 탐색하면서 요구조건에 충족되는 결과만을 가져온다.이 알고리즘의 강력한 점은 예외 없이 100%의 확률로 정답만을 출력한다.즉, 요약하자면 "모든 경우의 수를 모두 탐색"하는 알고리즘인 것이다. (전문 용어로 노가다....)경우의 수를 다 찾는 거라, 시간 복잡도는 높아질 수밖에 없다."모든 경우의 수" 탐색이기에,대부분 브루트 포스는 반복문과 조건문을 이용해서 알고리즘을 만들게 된다.쓰는 이유그럼 이 "알고리즘"을 사용하는 이유가 뭘까?간단하다.예외 없이 100%의 확률로.. 2024. 8. 25.