알고리즘/백준 알고리즘

https://www.acmicpc.net/problem/23881 23881번: 알고리즘 수업 - 선택 정렬 1 첫째 줄에 배열 A의 크기 N(5 ≤ N ≤ 10,000), 교환 횟수 K(1 ≤ K ≤ N)가 주어진다. 다음 줄에 서로 다른 배열 A의 원소 A1, A2, ..., AN이 주어진다. (1 ≤ Ai ≤ 109) www.acmicpc.net 이 문제에서 주의할건 정렬을 할 때 뒤에서부터 정렬한다는 것 (max값을 찾아서 정렬) 시간초과 였다. 정답1 (python 3) import sys input = sys.stdin.readline if __name__ == '__main__': N, K = map(int, input().split()) A = list(map(int, input().sp..
https://www.acmicpc.net/problem/1003 1003번: 피보나치 함수 각 테스트 케이스마다 0이 출력되는 횟수와 1이 출력되는 횟수를 공백으로 구분해서 출력한다. www.acmicpc.net 진짜 어렵지 않아보였는데 꽤나 애먹은 문제 ^,ㅠ 이 문제는 DP로 풀어야 하는데 처음에 메모이제이션으로 접근했다가 자꾸 NameError가 뜨면서 문제 원인을 알 수 없게됨 그래서 타뷸레이션 방식으로 바꿨다. 타뷸레이션 방식이 메모이제이션보다 더 효율적이기도 하고? (재귀를 쓰다보면 콜스택에 함수가 쌓이면서 메모리를 낭비하는 문제가 있는 반면에 타뷸레이션으로 하면 재귀를 쓰지 않고 상향식으로 접근하면서 계속 했던 값을 저장하니 메모리도 더 효율적으로 쓰는 장점이 있다. ) 정답 풀이 inpu..
https://www.acmicpc.net/problem/2468 2468번: 안전 영역 재난방재청에서는 많은 비가 내리는 장마철에 대비해서 다음과 같은 일을 계획하고 있다. 먼저 어떤 지역의 높이 정보를 파악한다. 그 다음에 그 지역에 많은 비가 내렸을 때 물에 잠기지 않는 www.acmicpc.net 코드 from sys import stdin import sys input = stdin.readline sys.setrecursionlimit(10000000) region = [] # region은 전역으로 visit = [] dx, dy = [1, -1, 0, 0], [0, 0, 1, -1] def solution(): global region,visit # 1. 입력정보 받기 N = int(inp..
https://www.acmicpc.net/problem/20953 20953번: 고고학자 예린 예린은 고고학자이다. 예린은 강원대학교 백록관 지하에서 고인돌이 발견되었다는 소식을 듣고 누구보다 빠르게 백록관에 도착하였다. 고인돌을 본 순간 예린은 놀라 자빠질 수밖에 없었다. 고 www.acmicpc.net 쉬운 문제인데 평소에 머리를 워낙 안쓰다시피 하니 끙끙거린다.. 이 문제는 처음에 이런 식으로 풀다가 시간 초과 로 인해 통과되지 않는다. def solution(a, b): sum = 0 for i in range(a + b): for j in range (a + b): for _ in range(j): sum += 1 return sum if __name__ == '__main__': T = in..
https://www.acmicpc.net/problem/1074 1074번: Z 한수는 크기가 2N × 2N인 2차원 배열을 Z모양으로 탐색하려고 한다. 예를 들어, 2×2배열을 왼쪽 위칸, 오른쪽 위칸, 왼쪽 아래칸, 오른쪽 아래칸 순서대로 방문하면 Z모양이다. N > 1인 경우, 배열을 www.acmicpc.net 핫쒸... 솔직히 처음엔 만만하게 봤는데 어려웠다. 알고리즘은 역시 평소에 꾸준히 안해두면 머리가 굳나보다...반성 반성...^,ㅠ 이 문제는 인덱스가 0부터 시작한다는 것과 재귀함수를 잘 사용해야 한다. (내 코드는 너무 더러웠고 가장 깔끔해보이고 이해된 코드를 기준으로 작성함.) 이 문제는 0, 1, 2, 3 사분면(원래는 1부터 시작하지만 0부터라 하겠다), 각각을 네 개의 case..
재귀함수로 팩토리얼(Factorial) 구현하기 https://www.acmicpc.net/problem/10872 10872번: 팩토리얼 0보다 크거나 같은 정수 N이 주어진다. 이때, N!을 출력하는 프로그램을 작성하시오. www.acmicpc.net for문이 아닌 재귀함수를 이용하여 팩토리얼(Factorial) 구현하기 Java import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int userInput = sc.nextInt(); System.out.print(factorial(userInput)); } public static..
출처 https://www.acmicpc.net/problem/2577 2577번: 숫자의 개수 첫째 줄에 A, 둘째 줄에 B, 셋째 줄에 C가 주어진다. A, B, C는 모두 100보다 같거나 크고, 1,000보다 작은 자연수이다. www.acmicpc.net 2577번: 숫자의 개수 첫째 줄에 A, 둘째 줄에 B, 셋째 줄에 C가 주어진다. A, B, C는 모두 100보다 같거나 크고, 1,000보다 작은 자연수이다. www.acmicpc.net ](https://www.acmicpc.net/problem/2577) 내 풀이 num1 = int(input()) num2 = int(input()) num3 = int(input()) # 일단 num1 * num2 * num3의 계산결과 알기 # 그리고 ..
출처 https://www.acmicpc.net/problem/2920 2920번: 음계 문제 다장조는 c d e f g a b C, 총 8개 음으로 이루어져있다. 이 문제에서 8개 음은 다음과 같이 숫자로 바꾸어 표현한다. c는 1로, d는 2로, ..., C를 8로 바꾼다. 1부터 8까지 차례대로 연주한다면 ascending, 8부터 1까지 차례대로 연주한다면 descending, 둘 다 아니라면 mixed 이다. 연주한 순서가 주어졌을 때, 이것이 ascending인지, descending인지, 아니면 mixed인지 판별하는 프로그램을 www.acmicpc.net 내 풀이 # 풀이 1 UserInput = list(map(int, input().split())) mixed = False for i ..
출처 : https://www.acmicpc.net/problem/10951 # 풀이1 (출처: https://home-body.tistory.com/258) while True: try: a, b = map(int, input().split()) print(a+b) except: break # 풀이2 (출처 : https://hwiyong.tistory.com/m/208?category=844316 ) import sys for line in sys.stdin: a, b = map(int, line.split()) print(a + b) # 풀이3 (출처 : https://sinb57.tistory.com/entry/Python-3-10951-A-B-4 ) try: while 1: a,b = map(i..
출처 https://hwiyong.tistory.com/140](https://hwiyong.tistory.com/140 내 풀이 while True: Userinput = list(map(int, input().split())) if Userinput == [0,0]: break else: print("%d" %(Userinput[0]+Userinput[1])) 헷갈렸던 점, 개선할 점 map함수를 쓸때 map(함수이름, iterable객체) 로 해야하는데 map(함수이름( ), iterable객체)으로 했다. while True: 대신에 while Userinput == (0, 0): 으로 하려고했는데 뭔가 잘 안됐다.. 나중에 다시 알아보자. sys모듈로 풀이한 사람도 있던데 이것에 대해 알아보자.
출처 : https://www.acmicpc.net/problem/10871 10871번: X보다 작은 수 첫째 줄에 N과 X가 주어진다. (1 ≤ N, X ≤ 10,000) 둘째 줄에 수열 A를 이루는 정수 N개가 주어진다. 주어지는 정수는 모두 1보다 크거나 같고, 10,000보다 작거나 같은 정수이다. www.acmicpc.net 문제 정수 N개로 이루어진 수열 A와 정수 X가 주어진다. 이때, A에서 X보다 작은 수를 모두 출력하는 프로그램을 작성하시오. 입력 첫째 줄에 N과 X가 주어진다. (1 ≤ N, X ≤ 10,000) 둘째 줄에 수열 A를 이루는 정수 N개가 주어진다. 주어지는 정수는 모두 1보다 크거나 같고, 10,000보다 작거나 같은 정수이다. 출력 X보다 작은 수를 입력받은 순서대..
https://www.acmicpc.net/problem/2438 간단한 별찍기 문제인데'출력 형식이 잘못되었습니다.' 라고 떠서 당황한 문제. 한참 헤매다가 range범위를 잘못찍어줬음을 발견함. 12345678910# 잘못된 코드count = int(input())for i in range(count+1): # range(count+1)로 하면 i의 값이 0,1,2,3,,,count가 되어버림. print("*"*i) # 수정하여 통과한 코드count = int(input())for i in range(1,count+1): # range(1, count+1)로 해야 i의 값이 1,2,3,,,count가 됨. print("*"*i)Colored by Color Scriptercs 사소한 문법이지만 그래..
sovelop
'알고리즘/백준 알고리즘' 카테고리의 글 목록