전체 글 267

[Python] 1209. sum

처음 코드 # 10개의 테스트 케이스 for idx in range(1, 11): n = int(input()) # 정사각형 안의 요소들 받아오기 board = [list(map(int, input().split())) for _ in range(100)] diagonal_t = 0 # 대각선 합 r_diagonal_t = 0 # 반대편 대각선 합 total = [] # 합들을 담을 리스트 for i in range(100): column_t = 0 for j in range(100): column_t += board[j][i] if i==j: diagonal_t += board[i][j] r_diagonal_t += board[i][99-j] total.extend([column_t, sum(board..

[Python] 1208. Flatten

import sys sys.stdin = open('input.txt') # min max index 함수 쓴 버전 # 10개의 테스트 케이스 for idx in range(1, 11): # 덤프 횟수 n = int(input()) # 각 상자의 높이 값 boxes_height = list(map(int, input().split())) # 평탄화 작업 for i in range(n): # 가장 높은 상자, 가장 낮은 상자 찾기 h_idx = boxes_height.index(max(boxes_height)) l_idx = boxes_height.index(min(boxes_height)) # 박스 옮기기 boxes_height[h_idx] -= 1 boxes_height[l_idx] += 1 # fin..

[Python] 4831. 전기버스

충전기가 있는 곳에서 다음 충전기까지의 거리와 연료랑을 검토하는 코드 # 노선 T t = int(input()) # 노선 t만큼 반복 for idx in range(1, t+1): # 정류장 수 k, 종점 n, 충전기 설치된 곳의 수 m k, n, m = map(int, input().split()) # 충전기가 설치된 곳 charger = list(map(int, input().split())) now = 0 # 현재 위치 battery = k # 배터리 상태 next_c = 1 # 다음 충전기 설치 된 곳의 idx answer = 0 # 최소 충전 횟수 # 목표지점 전까지 반복 # 목표지점에서는 배터리 0이어도 상관 X이므로 while now < n-1: now += 1 # 위치 이동 battery ..

[Python] 4835. 구간합

import sys sys.stdin = open('input.txt') # tc 수 tc = int(input()) # tc 수만큼 반복 for idx in range(1, tc+1): # 정수의 개수 n, 구간의 개수 M: n, m = map(int, input().split()) # n개의 정수 ai numbers = list(map(int, input().split())) # 최소 구간, 최대 구간 초기화 min_ai = 10000000000000000000000000 max_ai = 0 # 구간을 구할 것이므로 구간의 개수만큼 뺀 n-m+1 만큼 반복. for i in range(n-m+1): # section = sum(numbers[i:i + m]) section = 0 for j in ra..

[Python] 4834. 숫자 카드

# tc 수 tc = int(input()) # tc 수만큼 반복 for i in range(1, tc+1): # 카드 장수 n n = int(input()) # n개의 숫자 cards (0은 제거한다) cards = input() # 카드 개수가 들어갈 리스트 cards_count = [0 for i in range(10)] # 카드가 담긴 cards를 돌며 카드 개수 세기 for card in cards: # 장수가 같은 경우에는 큰 숫자를 출력해야하니 # 큰 카드를 앞쪽부터 저장한다. cards_count[9-int(card)] += 1 # 가장 많은 카드 개수 max_card = max(cards_count) # index 함수를 활용하여 가장 많은 카드 개수를 가진 인덱스를 출력한다. print..

[Python] 4828. min max

내장함수(min, max 함수) 쓰지않고 풀어보기 # TC 수 tc = int(input()) # tc 수만큼 반복 for idx in range(1, tc+1): # 양수의 개수 N n = int(input()) # N개의 양수 numbers numbers = list(map(int, input().split())) min_num = max_num = numbers[0] for i in range(n): # min 구하기 if min_num > numbers[i]: min_num = numbers[i] # max 구하기 if max_num < numbers[i]: max_num = numbers[i] print('#{} {}'.format(idx, max_num-min_num))

컴포넌트 스캔

컴포넌트 스캔과 의존관계 자동 주입 시작하기 스프링 빈을 등록할 때 자바 코드의 @Bean이나 XML의 등을 통해서 설정 정보에 직접 등록할 스프링 빈을 나열하는 방식은 이렇게 등록해야 할 스프링 빈이 수십, 수백 개가 되면 일일이 등록하기도 귀찮고, 설정 정보도 커지고, 누락하는 문제도 발생한다. 그래서 스프링은 설정 정보가 없어도 자동으로 스프링 빈을 등록하는 컴포넌트 스캔이라는 기능을 제공한다. 또 의존 관계도 자동으로 주입하는 @Autowired 라는 기능도 제공한다. @Configuration @ComponentScan( excludeFilters = @Filter(type = FilterType.ANNOTATION, classes = Configuration.class)) public clas..

Web/Spring 2021.08.10

싱글톤 컨테이너

웹 어플리케이션과 싱글톤 스프링 없는 순수한 DI 컨테이너인 AppConfig는 요청을 할 때마다 객체를 새로 생성한다. 웹 애플리케이션은 보통 여러 고객이 동시에 요청을 한다. 그런데 고객 트래픽이 초당 100이 나오면 초당 100개 객체가 생성되고 소멸된다! ➡︎ 메모리 낭비 해결방안은 해당 객체가 딱 1개만 생성되고, 해당 인스턴스를 공유하도록 설계하면 된다. ➡︎ 싱글톤 패턴 싱글톤 패턴 클래스의 인스턴스가 딱 1개만 생성되는 것을 보장하는 디자인 패턴이다. (한 자바 서버 안에서는 객체 인스턴스가 딱 1개만 생성된다) 어떻게 해야할까 ? ➡︎ 객체 인스턴스를 2개 이상 생성하지 못하도록 막아야 한다. private 생성자를 사용해서 외부에서 임의로 new 키워드를 사용하지 못하도록 막아야 한다...

Web/Spring 2021.08.07

스프링 컨테이너와 스프링 빈

스프링 컨테이너 생성 // 스프링 컨테이너 생성 // ApplicationContext 인터페이스의 구현체 ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class); // 꺼내기 // getBean(꺼낼거 이름(메서드 이름) , 반환타입) MemberService memberService = applicationContext.getBean("memberService", MemberService.class); ApplicationContext : 스프링 컨테이너. ApplicationContext는 인터페이스이다(→ 다형성 적용되어있음) 스프링 컨테이너는 @Configuration 이 붙은 A..

Web/Spring 2021.07.30

스프링 핵심 원리 이해 (AppConfig)

회원 도메인 설계 아래와 같은 다이어그램은 기획자들도 볼 수 있는 그림이다. 위의 다이어그램을 개발자가 구체화해서 클래스 다이어그램을 만들어낸다. (인터페이스랑 구현체들이 다 보이는거) 그리고 아래 다이어그램은 실제 서버를 실행하지 않고, 클래스를 분석해서 볼 수 있는 객체 다이어그램이다. 구현체는 동적으로(예를 들어 어떤 DB를 넣을지) 결정된다.(서버가 뜰때 new해서 뭘 넣을건지) 그래서 클래스 다이어그램만으로 판단하기 어렵다. 그래서 동적인 객체 다이어그램이 필요하다. 서버가 뜰 때, 클라이언트가 실제 사용할때 new한 인스턴스의 참조를 나타낸다. ✔︎ HashMap 보다는 ConcurrentHashMap을써줘야한다. HashMap은 동시성 문제가 발생할 수 있기 때문이다. ✔︎ 관례) 구현체 하..

Web/Spring 2021.07.27