GitHub

https://github.com/Choidongjun0830

전체 글 486

TIL 9장 단위 테스트

오늘 TIL 3줄 요약 테스트 코드도 깨끗하게 짜야한다. 테스트 코드는 지속적으로 관리하고 표현력을 높여야한다. 테스트 함수 하나 당 하나만 테스트해야한다. TIL (Today I Learned) 2022.05.08 오늘 읽은 범위 9장. 단위 테스트 책에서 기억하고 싶은 내용을 써보세요. TDD 법칙 세가지: 1. 실패하는 단위 테스트를 작성할 때까지 실제 코드를 작성하지 않는다. 2. 컴파일은 실패하지 않으면서 실행이 실패하는 정도로만 단위 테스트를 작성한다. 3. 현재 실패하는 테스트를 통과할 정도로만 실제 코드를 작성한다. 실제 코드가 진화하면 테스트 코드도 변해야 한다. 그런데 테스트 코드가 지저분할 수록 변경하기 어려워진다. (p.156) 코드에 유연성, 유지보수성, 재사용성을 제공하는 버팀목..

TIL 7장 오류처리

오늘 TIL 3줄 요약 예외가 발생할 코드를 짤 때는 try-catch-finally 문으로 시작하자. 메서드가 null을 반환하게 하지말고 빈리스트를 반환하도록하는게 낫다. 깨끗한 코드는 안정성도 높아야한다. TIL (Today I Learned) 2022.05.05 오늘 읽은 범위 7장. 오류처리 책에서 기억하고 싶은 내용을 써보세요. try 블록에서 무슨 일이 생기든지 catch 블록은 프로그램 상태를 일관성 있게 유지해야 한다. 그러므로 예외가 발생할 코드를 짤 때는 try-catch-finally 문으로 시작하는 편이 낫다. 그러면 try 블록에서 무슨 일이 생기든지 호출자가 기대하는 상태를 정의하기 쉬워진다. (p.132) 먼저 강제로 예외를 일으키는 테스트 케이스를 작성한 후 테스트를 통과하..

TIL 6장 객체와 자료구조

오늘 TIL 3줄 요약 절차적인 코드와 객체 지향 코드의 특성을 이해해야한다. 둘을 섞는 잡종 코드는 피하자. 각각의 특성에 따라 최적의 선택을 해야한다. TIL (Today I Learned) 2022.05.03 오늘 읽은 범위 6장. 객체와 자료구조 책에서 기억하고 싶은 내용을 써보세요. 절차적인 코드는 기존 자료 구조를 변경하지 않으면서 새 함수를 추가하기 쉽다. 반면, 객체 지향 코드는 기존 함수를 변경하지 않으면서 새 클래스를 추가하기 쉽다. (p.122) 절차적인 코드는 새로운 자료 구조를 추가하기 어렵다. 그러려면 모든 함수를 고쳐야 한다. 객체 지향 코드는 새로운 함수를 추가하기 어렵다. 그러려면 모든 클래스를 고쳐야한다. (p.122) 객체는 조회 함수로 내부 구조를 공개하면 안 된다는 ..

BaekJoon Online Judge 10825번 파이썬

문제 링크 https://www.acmicpc.net/problem/10825 이번 문제는 다른 문제들과 다르게 내림차순 정렬도 섞여있다. 오름차순 정렬은 x[i] 였다면 내림차순 정렬은 -x[i] 로 하면 된다. 정답 코드 import sys N = int(sys.stdin.readline()) students_subjects_scores = [[]*4 for i in range(0,N)] for i in range(0,N): students_subjects_scores[i] = list(sys.stdin.readline().split()) students_subjects_scores.sort(key=lambda x:(-int(x[1]),int(x[2]),-int(x[3]),x[0])) for i in..

BaekJoon Online Judge 10814번 파이썬

문제 링크 https://www.acmicpc.net/problem/10814 나이 순으로 정렬한 후에 나이가 같으면 등록한 순으로 정렬하는 문제다. 등록한 순으로 어떻게 정렬해야할지 고민이었는데 나이 순으로 정렬하기만하면 되는 문제였다. 그러고 나서도 계속 ‘틀렸습니다’가 떠서 뭔가 싶었다. 정렬하는 부분에서 member_info.sort(key = lambda x: x[0]) 에서 x: int(x[0])로만 바꿔주면 되는 문제였다. 정답 코드 import sys N = int(sys.stdin.readline()) member_info = [[]*2 for i in range(0,N)] for i in range(0,N): member_info[i] = list(sys.stdin.readline()...

TIL 5장 형식 맞추기

오늘 TIL 3줄 요약 규칙을 일관적으로 적용해야한다. 비슷한 의미를 갖거나 내용이 이어지면 가까이 배치해야하고 간단하게 시작해서 자세한 내용으로 끝나야한다. 띄어쓰기, 들여쓰기, 함수 선언 위치, 변수 선언 위치 등을 고려해야 가독성이 좋은 코드를 작성할 수 있다. TIL (Today I Learned) 2022.05.02 오늘 읽은 범위 5장. 형식 맞추기 책에서 기억하고 싶은 내용을 써보세요. 오늘 구현한 코드의 가독성은 앞으로 바뀔 코드의 품질에 지대한 영향을 미친다. (p.96) 500줄을 넘지 않고 대부분 200줄 정도인 파일로도 커다란 시스템을 구축할 수 있다는 사실이다. (p.97) 소스 파일 첫 부분은 고차원 개념과 알고리즘을 설명한다. 아래로 내려갈수록 의도를 세세하게 묘사한다. 마지막..

BaekJoon Online Judge 11651번 파이썬

문제 링크 https://www.acmicpc.net/problem/11651 11651번: 좌표 정렬하기 2 첫째 줄에 점의 개수 N (1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N개의 줄에는 i번점의 위치 xi와 yi가 주어진다. (-100,000 ≤ xi, yi ≤ 100,000) 좌표는 항상 정수이고, 위치가 같은 두 점은 없다. www.acmicpc.net 이번에는 y값이 같은 경우에만 x값을 이용하여 정렬하는 문제이다. 그래서 그냥 sort만 사용하지 않고 sort(key= lambda x:(x[1],x[0]))을 이용하여 배열의 두번째 인덱스, 즉 y좌표가 우선임을 알려주었다. 나머지는 11650번과 동일하다. 정답 코드 import sys N = int(sys.stdin.rea..

BaekJoon Online Judge 11650번 파이썬

문제 링크 https://www.acmicpc.net/problem/11650 11650번: 좌표 정렬하기 첫째 줄에 점의 개수 N (1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N개의 줄에는 i번점의 위치 xi와 yi가 주어진다. (-100,000 ≤ xi, yi ≤ 100,000) 좌표는 항상 정수이고, 위치가 같은 두 점은 없다. www.acmicpc.net 2차원 배열의 형태로 좌표들을 입력받았다. sort()함수에서 자동으로 x좌표가 같으면 y좌표로 정렬해주었다. 그대로 출력하면 대괄호와 컴마가 같이 출력이 된다. 그래서 2차원배열의 인덱싱을 이용하여 출력하였다. 정답 코드 import sys N = int(sys.stdin.readline()) coord = [[0] * 2 for ..

BaekJoon Online Judge 2751번 파이썬

문제 링크 https://www.acmicpc.net/problem/2751 2751번: 수 정렬하기 2 첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 수가 주어진다. 이 수는 절댓값이 1,000,000보다 작거나 같은 정수이다. 수는 중복되지 않는다. www.acmicpc.net 처음에 잘못 짠 코드 import sys N = int(sys.stdin.readline()) numbers = [0] * N for i in range(0,N): numbers[i] = int(sys.stdin.readline()) for i in range(0,N): for j in range(i,N): if numbers[i] >= numbers[j]: dummy = n..

BaekJoon Online Judge 11052번 파이썬

문제 링크 https://www.acmicpc.net/problem/11052 11052번: 카드 구매하기 첫째 줄에 민규가 구매하려고 하는 카드의 개수 N이 주어진다. (1 ≤ N ≤ 1,000) 둘째 줄에는 Pi가 P1부터 PN까지 순서대로 주어진다. (1 ≤ Pi ≤ 10,000) www.acmicpc.net 민규가 원하는 카드의 개수를 card_need 변수로 받았다. 카드팩의 가격을 pack으로 받았다. 그리고 카드팩의 카드 개수와 인덱스를 맞추기 위해 0의 자리에 0을 넣어두고 input을 받았다. 처음에 잘못 짠 코드 card_need = int(input()) pack = [0] + list(map(int,input().split())) for i in range(1,card_need+1)..

728x90