본문 바로가기

알고리즘 공부

(207)
[백준 파이썬] #1037: 약수 https://www.acmicpc.net/problem/1037 1037번: 약수 첫째 줄에 N의 진짜 약수의 개수가 주어진다. 이 개수는 50보다 작거나 같은 자연수이다. 둘째 줄에는 N의 진짜 약수가 주어진다. 1,000,000보다 작거나 같고, 2보다 크거나 같은 자연수이고, 중복되 www.acmicpc.net [문제 이해] 양수 A가 N의 진짜 약수가 되려면, N이 A의 배수이고 A가 1과 N이 아니어야 한다. ex) N=8 → A=2,4 / N=32 → A=2,4,8,16 [풀이 생각] ex) N=8 → A=2,4 / N=32 → A=2,4,8,16 즉 진짜 약수 중 제일 작은 값과 제일 큰 값을 곱하면 N이 된다. [정답] 1. 진짜 약수의 개수 N을 입력받는다. 2. N의 진짜 약수를 입력..
[백준 파이썬] #9012: 괄호 https://www.acmicpc.net/problem/9012 9012번: 괄호 괄호 문자열(Parenthesis String, PS)은 두 개의 괄호 기호인 ‘(’ 와 ‘)’ 만으로 구성되어 있는 문자열이다. 그 중에서 괄호의 모양이 바르게 구성된 문자열을 올바른 괄호 문자열(Valid PS, VPS)이라고 www.acmicpc.net [문제 이해] 괄호 문자열(Parenthesis String, PS): 두 개의 괄호 기호인 ‘(’ 와 ‘)’ 만으로 구성되어 있는 문자열 올바른 괄호 문자열(Valid PS, VPS) : 괄호의 모양이 바르게 구성된 문자열 ex) “(())()”, “((()))” → VPS O / “(()(”, “(())()))” , “(()” → VPS X [풀이 생각] 스택을 ..
[백준 파이썬] #10773: 제로 https://www.acmicpc.net/problem/10773 10773번: 제로 첫 번째 줄에 정수 K가 주어진다. (1 ≤ K ≤ 100,000) 이후 K개의 줄에 정수가 1개씩 주어진다. 정수는 0에서 1,000,000 사이의 값을 가지며, 정수가 "0" 일 경우에는 가장 최근에 쓴 수를 지우고, 아닐 경 www.acmicpc.net [정답] 1. 입력할 정수의 개수 K를 입력받는다. 2. 스택 num_stack을 초기화한다. 3. 0~K-1동안 for문을 돌면서 num을 입력받아 만약 num==0 이라면 num_stack에서 가장 최근에 넣은 수를 pop한다. 그 외의 경우라면 num_stack에 num을 넣는다. 4. 최종적으로 num_stack에 들어있는 숫자들의 합을 출력한다.
[백준 파이썬] #1316: 그룹 단어 체커 https://www.acmicpc.net/problem/1316 1316번: 그룹 단어 체커 그룹 단어란 단어에 존재하는 모든 문자에 대해서, 각 문자가 연속해서 나타나는 경우만을 말한다. 예를 들면, ccazzzzbb는 c, a, z, b가 모두 연속해서 나타나고, kin도 k, i, n이 연속해서 나타나기 때 www.acmicpc.net [문제 이해] ccazzzzbb, kin, happy → 그룹 단어 O aabbbccb, abab → 그룹 단어 X 즉 알파벳이 연속되는 경우는 상관없지만 똑같은 알파벳이 연속되지 않게 나타날 경우 그룹 단어가 아니다. [풀이 생각] - 알파벳이 리스트에 있지 않다면 해당 알파벳을 리스트에 넣어준다. - 만약 해당 알파벳이 이전 알파벳과 같지 않고 리스트에 존재한다..
[백준 파이썬] #1157: 단어 공부 https://www.acmicpc.net/problem/1157 1157번: 단어 공부 알파벳 대소문자로 된 단어가 주어지면, 이 단어에서 가장 많이 사용된 알파벳이 무엇인지 알아내는 프로그램을 작성하시오. 단, 대문자와 소문자를 구분하지 않는다. www.acmicpc.net [정답] 1. 알파벳 대소문자로 이루어진 단어를 입력받아 모두 대문자로 변경해 word로 정의한다. 알파벳의 수를 넣어줄 num을 정의한다. 2. 아스키코드 A~Z 만큼 for문을 돌면서 A~Z의 수를 count해 리스트 num에 추가한다. 3. 만약 max(num)가 num에 1개 있다면 max(num)에 해당하는 알파벳을 출력한다. 그 외의 경우 '?'을 출력한다.
[백준 파이썬] #9295: 주사위 https://www.acmicpc.net/problem/9295 9295번: 주사위 각 테스트 케이스마다 "Case x: "를 출력한 다음, 주사위를 두 번 던져 나온 두 수의 합을 출력한다. 테스트 케이스 번호(x)는 1부터 시작한다. www.acmicpc.net [정답] 1. 테스트 케이스의 개수 T를 입력받는다. 2. 0~T-1동안 for문을 돌면서 주사위를 두 번 던져 나온 두 수 a,b를 입력받는다. 그리고 주사위를 두 번 던져 나온 두 수의 합을 출력한다.
[백준 파이썬] #2476: 주사위 게임 https://www.acmicpc.net/problem/2476 2476번: 주사위 게임 첫째 줄에는 참여하는 사람 수 N이 주어지고 그 다음 줄부터 N개의 줄에 사람들이 주사위를 던진 3개의 눈이 빈칸을 사이에 두고 각각 주어진다. www.acmicpc.net [정답] 1. 참여하는 사람의 수 N을 입력받는다. 그리고 가장 많은 상금을 받은 사람의 상금을 winer로 정의한다. 2. 0~N-1(사람의 수만큼)동안 for문을 돌면서 3개의 주사위 값을 입력받아 리스트형태로 dice에 넣어준다. 3. 같은 주사위의 개수를 count로 정의하고 1로 초기화한다. 4. 0~2(주사위의 개수)동안 for문을 돌면서 만약 dice[i]의 개수가 count보다 크다면 count를 dice[i]의 개수로 업데이트하..
[백준 파이썬] #2480: 주사위 세개 https://www.acmicpc.net/problem/2480 2480번: 주사위 세개 1에서부터 6까지의 눈을 가진 3개의 주사위를 던져서 다음과 같은 규칙에 따라 상금을 받는 게임이 있다. 같은 눈이 3개가 나오면 10,000원+(같은 눈)*1,000원의 상금을 받게 된다. 같은 눈이 2개만 www.acmicpc.net [정답] 1. 3개의 주사위 값을 입력받아 리스트형태로 dice에 넣어준다. 같은 주사위의 개수를 count로 정의하고 1로 초기화한다. 2. 0부터 2까지 for문을 돌면서 만약 dice[i]의 개수가 count보다 크다면 count를 dice[i]의 개수로 업데이트하고 dice[i]를 같은 주사위의 수인 num에 넣어준다. 3. 만약 count==1라면 즉 같은 주사위가 없다면..