목록전체 글 (152)
호기심 많은 분석가
15881번: Pen Pineapple Apple Pen 여러 개의 사과, 파인애플, 그리고 펜이 일렬로 세워져 있다. 이 물건들의 순서를 바꾸지 않고 옆에 있는 물건끼리 연결했을 때, 펜-파인애플-애플-펜을 몇 개나 만들 수 있을지 세어보자. 단, 펜, www.acmicpc.net import sys n = int(sys.stdin.readline().strip()) arr = sys.stdin.readline().strip() ck = [1]*len(arr) result = 0 for i in range(len(arr)-3) : if arr[i:4+i] == 'pPAp' : if sum(ck[i:4+i])== 4 : result += 1 ck[i], ck[i+3] = 0, 0 print(result)..
1978번: 소수 찾기 첫 줄에 수의 개수 N이 주어진다. N은 100이하이다. 다음으로 N개의 수가 주어지는데 수는 1,000 이하의 자연수이다. www.acmicpc.net import sys def is_prime(x) : import math if x < 2 : return False for i in range(2, int(math.sqrt(x))+1): if x%i == 0 : return False return True n = int(sys.stdin.readline().strip()) arr = list(map(int, sys.stdin.readline().split())) result = 0 for i in arr : if is_prime(i) : result +=1 print(result..
10814번: 나이순 정렬 온라인 저지에 가입한 사람들의 나이와 이름이 가입한 순서대로 주어진다. 이때, 회원들을 나이가 증가하는 순으로, 나이가 같으면 먼저 가입한 사람이 앞에 오는 순서로 정렬하는 프로그램을 www.acmicpc.net import sys n = int(sys.stdin.readline().strip()) arr = [sys.stdin.readline().split() for i in range(n)] new_arr = sorted(arr, key=lambda x : int(x[0])) for i in new_arr : print(i[0], i[1]) sort를 나이에 대해서만 해주면 기입한 순서는 그대로 유지가 되므로 건드리지 않아도 된다. print() 구문 안에 여러 개의 원소를..
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)
for문과 while문의 차이가 뭘까? for문과 while문 모두 반복문으로 쓰이지만 조금의 차이점은 존재한다. for문 사용 for문의 경우 주로 반복 횟수가 정해진 경우 배열과 함께 사용한다. sum = 0 for i in range(10) : sum += i print(sum) while문 사용 while문은 무한루프나 특정 조건에 만족할 때까지 반복해서 사용한다. sum = 0 while True : sum += 1 if sum==10 : break for문과 while문은 서로를 표현할 수 있다고 한다. 그렇다면 왜 2개로 나누어져 있을까? 바로 코드의 효율성때문이다. 위의 두 경우 서로 표현하려고 하면 코드가 길어지기 때문에 간결히 표현할 수 있도록 나누어 사용하자. for문 무한루프 이 포..
포스팅의 제목은 Copy VS Deep Copy로 작 상하였지만, 실제로는 Shallow Copy(얕은 복사)와 Deep Copy(깊은 복사)의 차이다. 우리는 작업을 하다가 데이터를 여러 방면에서 뜯어보아야 할 때 copy() 메서드를 통해 데이터를 복사해두곤 한다. 하지만 이 작업은 위험할 수 있다. 왜 그렇고, copy와 deep copy는 어떤 차이점을 가질까? 1. Shallow Copy(얕은 복사) 객체를 복사할 때, 해당 객체만 복사하여 새 객체를 생성한다. 복사된 객체의 인스턴스 변수는 원본 객체의 인스턴스 변수와 같은 메모리 주소를 참조한다 따라서, 해당 메모리 주소의 값이 변경되면 원본 객체 및 복사 객체의 인스턴스 변수 값은 같이 변경된다. 2. Deep Copy(깊은 복사) 객체를 ..
포스팅 개요 Python에서 문자열 표현을 위해 %-formatting 방식과 str.format() 방식이 있음을 알았다. 최근 kaggle의 코드들을 보면서 f-string 표현식을 알게 되었는데, 꽤 편리해 f-string에 대해 더 알아보고자 한다. [Python 버전 3.6부터 지원] 포스팅 본문 f-string이란 문자열에 f 또는 F 접두어를 붙이고 표현식을 {expression}으로 작성하여 문자열에 파이썬 표현식의 값을 삽입할 수 있게 한다. 예를 들어 다음 문장의 경우 pi값을 소수점 이하 세 자리까지 표현함을 알 수 있다. ( :.3f를 통해, 공백이 없어야 한다) import math print(f'The value of pi is approximately {math.pi:.3f}'..