Koala - 5기/기초 알고리즘 스터디

8자리의 양의 정수가 주어질 때 그 안에서 연속하여 같은 숫자가 나오는 구간 중 가장 긴 것의 길이를 출력하는 문제이다. 일단 우선적으로 생각할 수 있는 것이 0번째부터 7번째 까지(여덟자리 라고 하였으므로) loop를 돌면서 검증을 하는 것인데, 이 때 ★지금 현재 위치에 있는 것과 바로 뒤 꺼를 비교할 때 for문 범위가 벗어나는 것이 가장 큰 문제였다. 따라서 양의정수와 아무 연관이 없는 문자 a를 붙인 다음에 loop를 그냥 0~7를 돌면 된다. 이후 if문을 선행하는 순서대로 나열한다.! 주석에 구체적인 설명이 있다 for i in range(3): s=input() #일단 연속해서 나오는 게 있는지 검증 s+='a' max=1 t=-1 sum=0 #연속하는 게 있다. 이제 연속하는 숫자들의 개..
https://www.acmicpc.net/problem/9012 9012번: 괄호 괄호 문자열(Parenthesis String, PS)은 두 개의 괄호 기호인 ‘(’ 와 ‘)’ 만으로 구성되어 있는 문자열이다. 그 중에서 괄호의 모양이 바르게 구성된 문자열을 올바른 괄호 문자열(Valid PS, VPS)이라고 www.acmicpc.net 문제 분석 여는 괄호와 닫는 괄호로 이루어진 문자열이 주어지고, 주어진 괄호들의 쌍이 올바른지 확인하는 문제이다. 입력으로는 표준입력을 사용하며, T개의 테스트 데이터로 주어진다. 입력의 첫번째 줄에는 입력 데이터의 수를 나타내는 정수 T가 주어지고, 각 테스트 데이터의 첫째 줄에는 괄호 문자열이 한 줄에 주어진다. 하나의 괄호 문자열의 길이는 2 이상 50 이하이다..
dictionary형태로, key값에 따른 value값을 업데이트함으로써 최대 value를 가지는 key값을 추출하는 코드이다. 일단 주의해야 할 것은 print(dict[3])이런식으로 하면 key값이 아닌 value값이 나온다는 사실! 그래서 애초에 dict의 key값들을 .keys()로 모아둔 다음에 출력하는 편이 낫다. 코드를 자세히 설명하자면 동아리의 key값을 각각의 이름으로 지정하고 모두 0으로 초기화시킨다. 이후 n으로 동아리원을 입력받고 가장 최대로 문제를 푼 사람을 대표로 내세우기 때문에 L보다 큰 값이 나올 때마다 값을 다시 갱신시켜준다. ☆이후 '가장 큰 value값을 가지는 key를 가지고 오는 함수는 max_key = max(딕셔너리 이름, key=딕셔너리이름.get)으로 구현할..
11931번 같은 경우에는 N개의 수가 주어졌을 때 이를 내림차순으로 정렬해야 한다. 계속 시간초과가 남을 알 수가 있었는데, 이는 input=sys.stdin.readline을 지정해줌으로써 해결되었다. 또한 시간초과는 시간복잡도가 원인이므로 for문이 아닌 sort()또는 sorted()를 사용해주면 된다. (정렬 문제 시) 여기서 주의해야 할 것은 sorted()는 리스트와 문자열 둘 다 적용이 가능하지만 sort()는 리스트만 가능하다는 점이다. 조금 더 자세히 설명해보면, t로 test의 개수를 입력받고, A라는 리스트를 만들어 이 리스트에 차곡차곡 입력값을 t 크기만큼 받는다. 루프가 끝난후 A.sort(reverse=True) 로 내림차순으로 sorting을 해준다. 이후 A 라는 list속..
https://www.acmicpc.net/problem/10824 10824번: 네 수 10824번 제출 맞힌 사람 숏코딩 재채점 결과 채점 현황 강의 네 수 시간 제한 메모리 제한 제출 정답 맞힌 사람 정답 비율 1 초 256 MB 18945 7842 6697 41.485% 문제 네 자연수 A, B, C, D가 주어진다. 이때, A와 B를 붙인 수와 C와 D를 붙인 수의 합을 구하는 프로그램을 작성하시오. 두 수 A와 B를 합치는 것은 A의 뒤에 B를 붙이는 것을 의미한다. 즉, 20과 30을 붙이면 2030이 된다. 입력 첫째 줄에 네 자연수 A, B, C, D가 주어진다. (1 ≤ A, B, C, D ≤ 1,00... 문제 코드 문제풀이 a와 c에는 각각 b와 d의 자릿수만큼 10을 제곱해서 곱해..
문제 https://www.acmicpc.net/problem/10886 풀이 설문조사를 한 사람의 수를 입력받아 변수 n에 저장한 후, 설문조사에 1로 응답한 사람의 수를 cnt라 하고 0으로 초기화한다. 0 또는 1을 입력받고, 1을 입력받은 경우에 cnt에 1을 더해 주는 과정을 n번 반복한다. 모든 과정이 끝난 후, n이 홀수이므로 cnt가 n을 2로 나눈 몫보다 클 경우에 'Junhee is cute!'를 출력하고, 그렇지 않으면 'Junhee is not cute!'를 출력한다. 코드 n = int(input()) cnt = 0 for i in range(n): op = int(input()) if op == 1: cnt += 1 if cnt > n//2: print('Junhee is cut..
https://www.acmicpc.net/problem/4458 4458번: 첫 글자를 대문자로 첫째 줄에 줄의 수 N이 주어진다. 다음 N개의 줄에는 문장이 주어진다. 각 문장에 들어있는 글자의 수는 30을 넘지 않는다. 모든 줄의 첫 번째 글자는 알파벳이다. www.acmicpc.net 문제 분석 이 문제는 n개의 문장을 입력받아 각 문장의 첫 글자를 대문자로 변환하여 출력하는 문제이다. 코드 n = int(input()) for i in range(n): sentence = input() char = sentence[0].upper() print("{}{}".format(char,sentence[1:])) 문제풀이 먼저 n개의 줄을 입력 받기 위해 n을 정수형으로 받아준다. 그 후 n만큼 반복하는..
2675번의 문자열 반복 문제를 풀어보았다. 문제를 요약 하자면 처음으로 반복할 문자열 개수(2개) 가 주어지고, 그다음 부터 각각 반복할 문자열 개수(3,5)와 해당 문자열(ABC, /HTP)가 주어지는 것 같다. 먼저 반복할 문자열 개수를 배열로 받고, 그 수만큼 생성한 2차원 배열의 인덱스에 각각 저장한 후, 출력해주는 형식으로 코드를 작성해 보았다.
문제 동규는 세수를 하다가 정렬이 하고싶어졌다. 숫자 세 개를 생각한 뒤에, 이를 오름차순으로 정렬하고 싶어 졌다. 숫자 세 개가 주어졌을 때, 가장 작은 수, 그 다음 수, 가장 큰 수를 출력하는 프로그램을 작성하시오. 입력 숫자 세 개가 주어진다. 이 숫자는 1보다 크거나 같고, 1,000,000보다 작거나 같다. 이 숫자는 모두 다르다. 출력 제일 작은 수, 그 다음 수, 제일 큰 수를 차례대로 출력한다. 예제 입력 1 복사 3 1 2 예제 출력 1 복사 1 2 3 [ 문제분석 ] 숫자 세 개를 입력받으면 오름차순으로 출력한다. [ 코드 ] [ 문제풀이 ] 입력받은 세 수를 A 행렬에 저장한다. 문제에서 숫자는 3개라고 했으므로 A 행렬의 크기는 정해져있다. for문을 이용해 세 수를 A 행렬로 받..
https://www.acmicpc.net/problem/13752 문제분석 처음에 n값을 입력받는다. 이후 for문을 이용해 '=' 값을 반복해 출력할 k값을 n번 입력받고, 출력한다. 코드 n = int(input()) for i in range(n): k = int(input()) print('='*k) 문제풀이 스터디 하기 전, C언어만 사용해서 백준 문제들을 풀었었다. C언어가 파이썬에 비해 구동속도가 빠르다는 장점이 있지만, 문자열을 이용하는 문제풀이는 파이썬에 비해 너무 어려웠다. 파이썬에선 print문 안에 문자와 정수간의 곱셈을 할 수 있다는, 아주 편리한 방법을 알게 되었다. 앞서 문제분석에 했던 것과 같이 print문 안에서 '='*k 구문만 주의깊게 사용하면 큰 문제 없이 풀 수 있다.
https://www.acmicpc.net/problem/11022 11022번: A+B - 8 각 테스트 케이스마다 "Case #x: A + B = C" 형식으로 출력한다. x는 테스트 케이스 번호이고 1부터 시작하며, C는 A+B이다. www.acmicpc.net 문제분석 계산해야 될 T의 개수를 입력받고, 각각의 줄에서 입력받는 두 정수의 합을 출력하는 문제이다. 입력받는 두 정수의 사이에는 공백이 주어진 하나의 줄로 입력해야된다. 그리고 출력을 할 때는 각 줄에 해당하는 두 정수의 합과 해당 줄을 의미하는 문자열을 함께 출력한다. 코드 문제풀이 입력받는 T의 값만큼 for문을 실행한다. 그리고 두 정수를 입력하기 위한 map()과 split()를 이용한다. 왜냐하면 문제분석에서 언급했듯이 하나의 ..
1. [BOJ 4435] 중간계 전쟁 https://www.acmicpc.net/problem/4435 4435번: 중간계 전쟁 첫째 줄에 전투의 개수 T가 주어진다. 각 전투는 두 줄로 이루어져 있다. 첫째 줄에 간달프 군대에 참여한 종족의 수가 주어진다. 이 값은 공백으로 구분되어 있으며, 호빗, 인간, 엘프, 드워프, www.acmicpc.net 문제에서 요구한 대로 아래 내용에 맞게 점수를 곱해 더해주면 되는 문제입니다. 간달프 호빗 - 1 인간 - 2 엘프 - 3 드워프 - 3 독수리 - 4 마법사 - 10 사우론 오크 - 1 인간 - 2 워그(늑대) - 2 고블린 - 2 우럭하이 - 3 트롤 - 5 마법사 - 10 t = int(input()) for i in range(t): a1, a2, ..
KauKoala
'Koala - 5기/기초 알고리즘 스터디' 카테고리의 글 목록 (6 Page)