https://www.acmicpc.net/problem/15813 15813번: 너의 이름은 몇 점이니? 소윤이는 성필이에게 단단히 화가 났다. 성필이가 자꾸 소윤이의 이름을 놀리는 것이다! 극대노한 소윤이는 이름에 대해 많은 검색을 하던 도중 "이름점수"라는 것을 발견하게 된다. 이름 점수 www.acmicpc.net 문제분석 입력할 문자열의 길이를 먼저 입력한다. 다음으로 입력한 문자열의 길이만큼 대문자 알파벳들을 입력한다. 입력한 각 알파벳 대문자의 순서만큼 모두 합친 값이 문제에서 요구하는 이름의 점수를 뜻한다. 코드 문제풀이 우선, 문제에서 요구하는 문자열의 길이(n)와 문자열(a)을 입력받는다. 다음으로 문자열의 각각의 한 글자를 리스트처럼 취급하기 위해서 for문을 활용한다. 여기서 처음에..
분류 전체보기
https://www.acmicpc.net/problem/1874 1874번: 스택 수열 1부터 n까지에 수에 대해 차례로 [push, push, push, push, pop, pop, push, push, pop, push, push, pop, pop, pop, pop, pop] 연산을 수행하면 수열 [4, 3, 6, 8, 7, 5, 2, 1]을 얻을 수 있다. www.acmicpc.net 문제 코드 #include using namespace std; #include #define PI 3.141592653589793 #define ll long long int main(void) { ios_base::sync_with_stdio(0); cin.tie(0); stack s; string c; int ..
이 문제에서 주의해야 할 점은 player1이 이기다가.. 다시 비기게 되는 순간에 player1이 이기는 시간이 멈추어져야 하고, player2가 다시 선방(?)하게 될 때 또 player2의 이기는 순간이 시작되어야 한다. 그래서 이 때 관점을 우리가 하나씩 입력받는 순간마다 바뀌도록 했는데, 그 방법은 예를 들어 player 1 -> 1 -> 2 -> 2 -> 2 ->라고 하면 player가 이길 때는 +1로 양수로 한 칸 가고 2가 이길 때는 -1로 간다. 즉, 0이 되는 순간이 비기는 거고 양수는 player1이 이기는 거, 음수는 player2가 이기는 거다. (1, 2, 1, 0, -1 이 됨) 그렇게 하면 비기는 순간/player2가 이기는 순간이 헷갈리지 않게 잘 나타나졌다!! 그리고 이..
문제 풀이 입력 : 학생 수 N, 친구 관계 수 M, 가지고 있는 돈 k가 주어진다. 두번째 줄 부터 학생 N의 학생이 원하는 친구비 An 이 주어진다. M개의 친구 관계가 주어진다. M개의 친구 관계를 이용하여 서로 친구 관계인 집합을 구합니다. 유니온 파인드를 이용하였는데 배열 내에서 같은 값(친구 관계 중에서 가장 낮은 번호)을 가지면 친구 관계이므로, 이 들중에서 가장 적은 친구비를 총합에 더합니다. 모든 집합에서 한 명씩 친구비를 구하여 초기에 주어진 k와 비교하여 결과를 출력합니다. 코드 import java.io.*; import java.util.*; import java.math.*; class Main { static int arr[]; static int find(int x) { if..
https://www.acmicpc.net/problem/14465 14465번: 소가 길을 건너간 이유 5 첫 줄에 N, K, B (1 ≤ B,K ≤ N)가 주어진다. 그 다음 B줄에는 고장난 신호등의 번호가 하나씩 주어진다. www.acmicpc.net 해당 문제를 투포인터의 아이디어를 차용해서 풀어봤습니다.(사실 이중 for문으로 풀었다고 해도 맞는 말인것 같습니다) 문제 설명부터 하겠습니다. 신호등의 개수가 N으로 주어지고 부서진 신호등의 개수가 B로 주어집니다. 부서진 신호등은 수리가 가능하고, 최소한의 수리 횟수로 연속한 K개의 신호등을 만들어야 합니다. 해당 문제를 푼 아이디어를 나열하면 다음과 같습니다. 총 두개의 포인터를 사용합니다 (편의상 각각 Anchor와 Move로 명명했습니다) A..
N은 덱에 들어 있는 원소의 개수이고, M은 내가 목표로 하는 값의 위치이다. 계속해서 deque의 맨 앞의 원소를 다른 원소들과 비교했을 때 , 더 큰 원소가 없을 경우에는 popleft해주고 N,M을 하나씩 줄여주면 되고, remove했으므로 Remove를 1씩 늘인다. 더 큰 원소가 있을 경우에는 popleft해준 걸 뒤로 append시키며, M만 하나 줄인다. 이걸 M이 -1이 될 때까지 (즉 내가 목표하는 값이 드디어 pop 되었을 때) 한 후 remove 변수값을 구하면 된다. from collections import deque import sys input=sys.stdin.readline t=int(input()) for i in range(t): N,M=map(int, input().s..
https://www.acmicpc.net/problem/1157 1157번: 단어 공부 알파벳 대소문자로 된 단어가 주어지면, 이 단어에서 가장 많이 사용된 알파벳이 무엇인지 알아내는 프로그램을 작성하시오. 단, 대문자와 소문자를 구분하지 않는다. www.acmicpc.net 문제 해석 한 단어를 입력받고 입력받은 단어의 알파벳 개수를 세어 가장 많이 사용된 알파벳을 대문자로 출력하는 문제이다. 이때 가장 많이 사용된 단어가 여러 개라면 "?" 을 출력해야 한다. 코드 n = input().upper() word = list(set(n)) word_count = [] for i in word: word_count.append(n.count(i)) temp = max(word_count) if word_..
https://www.acmicpc.net/problem/5218 5218번: 알파벳 거리 첫째 줄에 테스트 케이스의 수 (< 100)가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있고, 두 단어가 공백으로 구분되어져 있다. 단어의 길이는 4보다 크거나 같고, 20보다 작거나 같으며, 알 www.acmicpc.net 문제분석 아스키 코드를 통해 풀 수 있는 문제이다. 알파벳 순으로 숫자를 부여하기 때문에 입력을 받아서 아스키 코드로 변환해주면 풀 수 있다. 빈 리스트에 변환된 아스키 코드 값을 for loop 문을 돌면서 집어넣으면 된다. 단, x가 y보다 큰 경우에 y에 26을 더해서 빼줘야 하므로 이 경우를 if 문을 통해 케이스를 추가해서 리스트에 집어넣도록 한다 코드 n = int(input..
https://www.acmicpc.net/problem/14561 14561번: 회문 n진수는 base가 n인 수를 말한다. 예를 들어 십진수는 base가 10인 수이다. n진수의 수 AmAm-1Am-2…A1A0를 n진수로 표현해보면 AmAm-1Am-2…A1A0 = Am × nm + Am-1 × nm–1 + Am-2 × nm–2 + … + A1 × n1 + A0 × n0이다. www.acmicpc.net 문제 분석 n진수는 base가 n인 수를 말한다. 예를 들어 십진수는 base가 10인 수이다. n진수의 수 AmAm-1Am-2…A1A0를 n진수로 표현해보면 AmAm-1Am-2…A1A0 = Am × nm + Am-1 × nm–1 + Am-2 × nm–2 + … + A1 × n1 + A0 × n0이다...
이 문제는 구현은 쉽지만 그냥 for문으로 돌리면 시간초과가 난다 ㅠ 그래서 더 빨리 해결할 수 있는 알고리즘을 찾아야 한다. 빨리 해결하는 방법은 그리 어렵지 않다. 일단 sort를 이용해서 두 수열(A,B)을 내림차순으로 정렬시킨다. 이 때 A의 값을 하나씩 늘리면서 점검하고, B도 값을 늘리면서 점검하는데 만약 B의 어떤 값이 A보다 작은게 나오면 어차피 뒤에 있는 것들도 다 작을 것이므로 그냥 뒤에 있는 것들의 개수를 더해주고(len(B)-j) 다시 A로 패스시킨다. 사실상 A -> A'로 넘어갈 때 어차피 A'은 A보다 작으니까 A가 B에서 그냥 stop해줬던 부분(A가 자기보다 작아서 그냥 pass했던)부터 다시 점검해주면 되니까 B의 앞에 것들은(A가 봤을 때 자기보다 컸으므로 A'에게도 큰..
일단 처음에는 내가 목표하는 수열을 input으로 다 받은 다음에 그걸 endList로 받았고, startList를 [1,2,3,...8]로 받아서 비교하는 형식의 코드를 짰는데 이렇게 할 시 상관은 없으나 시간초과가 계속 난다. ex> ''' start = / / / 4 5 6 7 8 end = / / 6 8 7 5 2 1 List= 1 2 ''' 그래서 스택 하나에 입력하는 수를 꾸준히 넣고, 넣는 도중 top이 입력한 수와 맞으면 pop하도록 하는 형식의 코드를 짜야 한다. 일단 입력을 받은 수는 목표로 하는 수이다. 그 목표보다 stack[-1]이 작으면 stack에 계속 append해주고, 크면 계속 pop해준다. (코드 짤 때 가장 헷갈릴 수 있는 것이, 목표한 것이 바로 나와버릴 때는 그냥 ..
https://www.acmicpc.net/problem/1371 1371번: 가장 많은 글자 첫째 줄부터 글의 문장이 주어진다. 글은 최대 50개의 줄로 이루어져 있고, 각 줄은 최대 50개의 글자로 이루어져 있다. 각 줄에는 공백과 알파벳 소문자만 있다. 문장에 알파벳은 적어도 하나 이 www.acmicpc.net 문제 분석 영어권에서는 어떤 글자가 다른 글자보다 많이 쓰인다. 예를 들어, 긴 글에서 약 12.31%를 차지하는 글자는 e이다. 어떤 글이 주어졌을 때, 가장 많이 나온 글자를 출력하라. 입력으로는 첫째 줄부터 글의 문장이 주어진다. 글은 최대 50개의 줄로 이루어져 있고, 각 줄은 최대 50개의 글자로 이루어져 있다. 각 줄에는 공백과 알파벳 소문자만 있다. 문장에 알파벳은 적어도 하나..