목록Coding/Coding Test & Algorithm (60)
호기심 많은 분석가

2609번: 최대공약수와 최소공배수 첫째 줄에는 입력으로 주어진 두 수의 최대공약수를, 둘째 줄에는 입력으로 주어진 두 수의 최소 공배수를 출력한다. www.acmicpc.net import sys import math n, m = map(int, sys.stdin.readline().split()) great = math.gcd(n, m) print(great) print(n*m//great) 이번 문제도 크게 어렵지 않다. 하지만 앞의 combination 찾는 문제처럼 math 라이브러리 안에 lcm이라는 최소공배수를 구해주는 method가 있음에도 불구하고 런타임 에러가 발생한다. 몇 개의 method는 백준에서 사용하지 못하게 막아둔 듯하다. 그래서 $ 최소공배수는 = \frac{두수의 곱}{최..

1181번: 단어 정렬 첫째 줄에 단어의 개수 N이 주어진다. (1 ≤ N ≤ 20,000) 둘째 줄부터 N개의 줄에 걸쳐 알파벳 소문자로 이루어진 단어가 한 줄에 하나씩 주어진다. 주어지는 문자열의 길이는 50을 넘지 않는다. www.acmicpc.net import sys n = int(sys.stdin.readline().rstrip()) arr = [sys.stdin.readline().strip() for _ in range(n)] new_arr = [(i, len(i)) for i in set(arr)] ans_list = sorted(new_arr, key=lambda x : (x[1], x[0])) for i in ans_list : print(i[0]) 이번 문제는 크게 어렵지 않다. 여..

1018번: 체스판 다시 칠하기 첫째 줄에 N과 M이 주어진다. N과 M은 8보다 크거나 같고, 50보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에는 보드의 각 행의 상태가 주어진다. B는 검은색이며, W는 흰색이다. www.acmicpc.net 여러 가지를 배운 문제였다. 우선 코드를 먼저 소개하고 설명하겠다. def get_result(data) : result = 0 for t in range(8) : for q in range(8) : if (t+q)%2 == 0 and data[t][q] != data[0][0] : result += 1 if (t+q)%2 == 1 and data[t][q] == data[0][0] : result += 1 return result def color_ch..

11050번: 이항 계수 1 첫째 줄에 N과 K가 주어진다. (1 ≤ N ≤ 10, 0 ≤ K ≤ N) www.acmicpc.net 크게 어려운 문제는 아니었지만 독특했다. math의 comb라는 combination 개수를 뽑아주는 함수가 있는데, 그 함수를 사용하면 런타임 에러가 발생한다. 그래서 간단하게 factorial로 구현해줬다. import math import sys n, k = map(int, sys.stdin.readline().split()) ans = math.factorial(n)/(math.factorial(k)*math.factorial(n-k)) print(ans)

9625번: BABBA 상근이는 길을 걷다가 신기한 기계를 발견했다. 기계는 매우 매우 큰 화면과 버튼 하나로 이루어져 있다. 기계를 발견했을 때, 화면에는 A만 표시되어져 있었다. 버튼을 누르니 글자가 B로 변했 www.acmicpc.net n = int(input()) d = [[] for _ in range(n+1)] d[0] = [1, 0] d[1] = [0, 1] for i in range(2, n+1) : d[i] = [d[i-1][0] + d[i-2][0], d[i-1][1] + d[i-2][1]] print(d[n][0], end=' ') print(d[n][1]) 며칠 전 펜과 노트를 안 가지고 있어서 머리로 한참 고민하다가 나중에 펜이랑 노트 가져와서 다시 풀고자 마음먹은 문제였다. 식..

코딩 테스트를 준비하다 보면 input의 경우 런타임 에러가 뜰 때가 있다. 실제로도 이것 때문에 애를 먹었는데, 이 것을 방지해줄 sys 라이브러리의 readline() 문법을 알아보자. 1. 한 개의 정수 입력받기 import sys a = int(sys.stdin.readline()) sys.stdin.readline()의 경우 한 줄 단위로 입력받기 때문에, 개행 문자가 같이 입력된다. 1을 입력한다면 '1\n'의 형태로 입력되기 때문에, int형으로 변환시켜줘야 함. 2. 임의의 개수의 정수를 한 줄에 입력받아 리스트에 저장 import sys arr = list(map(int, sys.stdin.readline().split())) input과 사용법이 크게 다르지 않다. split()을 통하..

10951번: A+B - 4 두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오. www.acmicpc.net solved.ac를 시작한김에 CLASS 1부터 해결하려고 했는데 의외의 부분에서 멈칫했다. 테스트 케이스의 개수가 주어지지 않아 당황했고, while문을 썼는데 런타임에러가 발생해 어떻게 해결해야 하나 고민하던 중 간단히 해결되었다. import sys while True : try : arr = list(map(int, sys.stdin.readline().split())) print(arr[0]+arr[1]) except : break try, except 구문을 통해 break를 걸어주면서 해결할 수 있었는데, 기억해두면 좋을 것 같아 포스팅에 남긴다.

포스팅 개요 '혹시나 책에 있을 모든 실수와 오류는 온전히 제 책임이며, 책에 실린 좋은 아이디어와 표현은 모두 리뷰어님들의 조언 덕분입니다. 정말 고맙습니다.'라는 지은이의 글은 나동빈 저자님의 인품을 느낄 수 있는 한 줄이었습니다. 저도 저런 마인드를 가진 사람이 되겠다고 다짐하며 책과의 여정을 떠나보겠습니다. 포스팅 본문 저번 포스팅에서는 다이나믹 프로그래밍에 대해 알아보았습니다. 2021.05.25 - [Coding Test & Algorithm] - [이것이 취업을 위한 코딩 테스트다 with 파이썬] (한빛미디어, 나동빈) Chapter8(1). 다이나믹 프로그래밍 [이것이 취업을 위한 코딩 테스트다 with 파이썬] (한빛미디어, 나동빈) Chapter8(1). 다이나믹 프로그 포스팅 개요 ..

포스팅 개요 '혹시나 책에 있을 모든 실수와 오류는 온전히 제 책임이며, 책에 실린 좋은 아이디어와 표현은 모두 리뷰어님들의 조언 덕분입니다. 정말 고맙습니다.'라는 지은이의 글은 나동빈 저자님의 인품을 느낄 수 있는 한 줄이었습니다. 저도 저런 마인드를 가진 사람이 되겠다고 다짐하며 책과의 여정을 떠나보겠습니다. 포스팅 본문 다이나믹 프로그래밍이란 메모리 공간을 약간 더 사용하여 연산 속도를 비약적으로 증가시키는 기법이다. 다이나믹 프로그래밍에는 탑다운과 바텀업 방식 2가지가 있다. 다이나믹 프로그래밍은 항상 사용할 수는 없으며, 다음 조건을 만족할 때 사용할 수 있다 1. 큰 문제를 작은 문제로 나눌 수 있다. 2. 작은 문제에서 구한 정답은 그것을 포함하는 큰 문제에서도 동일하다. 본 코드는 모두 ..

포스팅 개요 '혹시나 책에 있을 모든 실수와 오류는 온전히 제 책임이며, 책에 실린 좋은 아이디어와 표현은 모두 리뷰어님들의 조언 덕분입니다. 정말 고맙습니다.'라는 지은이의 글은 나동빈 저자님의 인품을 느낄 수 있는 한 줄이었습니다. 저도 저런 마인드를 가진 사람이 되겠다고 다짐하며 책과의 여정을 떠나보겠습니다. 포스팅 본문 이진 탐색은 배열 내부의 데이터가 정렬되어 있어야만 사용할 수 있는 알고리즘이다. 찾으려는 데이터와 중간점 위치에 있는 데이터를 반복적으로 비교해서 원하는 데이터를 찾아낸다. 시간 복잡도가 O(logN)이다. 이진 탐색은 코딩 테스트에서 단골로 나오는 문제이니 암기를 추천한다. 처리해야 할 데이터의 개수나 값이 1000만 단위 이상으로 넘어가면 이진 탐색과 같은 O(logN)의 속..