목록BASIC (93)
cmod.ify
집과 치킨집 좌표 추출지도를 매번 처음부터 끝까지 훑는 건 시간이 너무 오래 걸린다. 그래서 가장 먼저 지도에서 집이 있는 위치와 치킨집이 있는 위치만 따로 뽑아 주소록을 만든다.# 입력 받기n, m = map(int, input().strip().split())houses = []chickens = []# graph 입력 받기for r in range(n): row = list(map(int, input().strip().split())) for c in range(n): if row[c] == 1: houses.append((r, c)) elif row[c] == 2: chickens.append((r, c))치킨집 조합 생성..
1차원 DP 배열의 변화 원리1. 핵심 규칙: 뒤에서부터 채우기1차원 배열을 앞에서부터 채우면, 방금 업데이트한 값을 같은 물건에서 또 참조하게 되어 '물건 중복 담기' 오류가 발생함. 하지만 뒤에서부터 채우면 dp[j-w]는 아직 '이전 물건까지만 계산된 값'을 유지하고 있으므로 2차원 배열의 dp[i-1][j-w]와 똑같은 효과를 냄.2. 예시 상황 재현배낭 용량: 7물건 A: 무게 4, 가치 8물건 B: 무게 3, 가치 6[Step 1] 물건 A (4, 8) 처리j를 7부터 4까지 줄이며 계산함.dp[7] = max(0, dp[7-4]+8) = 8dp[6] = max(0, dp[6-4]+8) = 8dp[5] = max(0, dp[5-4]+8) = 8dp[4] = max(0, dp[4-4]+8) = ..
처음에 2차원 리스트로 만들었더니 메모리 초과 ㅠㅠ어쩐지 너무 쉽더라import sysimport heapqinput = sys.stdin.readlinen = int(input())gra = []gra.append([0 for _ in range(n + 2)])for i in range(1, n + 1): li = list(map(int, input().strip().split())) gra.append([0] + li + [0])xdp = [[0] * (n + 2) for _ in range(n + 1)]ndp = [[sys.maxsize] * (n + 2) for _ in range(n + 1)]ndp[0] = [0 for _ in range(n + 2)]for i in range(1, ..
예시 데이터 상황노드 수(N): 5개 / 간선 수(M): 8개시작점: 1번 / 도착점: 5번초기 상태: dists = [0, inf, inf, inf, inf, inf] (1번 노드만 0)단계별 동작 과정1. 시작 단계 (노드 1)우선순위 큐에서 (0, 1)을 꺼냄. 1번 노드와 연결된 인접 노드들을 확인하여 거리를 갱신함.1 → 2: 비용 2 (0+2 ) → dists[2] = 21 → 3: 비용 3 (0+3 ) → dists[3] = 31 → 4: 비용 1 (0+1 ) → dists[4] = 11 → 5: 비용 10 (0+10 ) → dists[5] = 10큐 상태: [(1, 4), (2, 2), (3, 3), (10, 5)] (비용 순 정렬)2. 최단 거리 노드 선택 (노드 4)큐에서 가장 비용이 ..
클라우드에서 바라보는 핵심 중점 사항서비스 가용성(Managed Service): 장비가 고장 날 걱정을 하지 않음. 클라우드 사업자가 장비의 생존(Health)을 책임지므로, 사용자는 설정값(Interval, Timeout 등)만 잘 정하면 됨.보안 그룹(Security Group)과 ACL: L3/L4 수준의 보안은 '보안 그룹'이라는 가상 방화벽으로 설정함. 물리 장비의 ACL보다 훨씬 직관적이고 관리가 쉬움.비용 최적화: 물리 장비는 한 번 사면 끝이지만, 클라우드는 트래픽 양에 따라 비용이 나감. 따라서 서비스 특성에 맞춰 L4(NLB)를 쓸지 L7(ALB)을 쓸지 선택하는 것이 곧 비용 절감임.확장성(Auto Scaling): 헬스 체크를 통해 서버가 죽으면 자동으로 새 서버를 생성하고 로드밸..
[ 환경 ]MSI 노트북CPU: AMD 라이젠 7 5700URAM: 16GBWi-Fi: RZ608(MediaTek MT7921 OEM) 칩셋GPU: Radeon Graphics(내장) 1. LINUX 공식 사이트에서 TLS 버전 다운 받기https://ubuntu.com/download/desktop 2. 최신 REFUSE 다운로드https://rufus.ie/ko/ Rufus - 부팅 가능한 USB 드라이브를 간편하게 만들기 rufus.ie 3. Refus 실행장치 - USB 꽂은 거 설정부팅 [선택] 눌러서 아까 다운 iso 파일 선택하기파티션 구성 : GPT - 대상시스템 자동 변경 4. BIOS 진입노트북을 끄고 다시 전원을 켜자마자 Del 키를 연타하여 바이오스 화면으로 들어감. 5. 필수 설..
사각형의 합을 미리 구해놔야 함1. 원본 데이터 (Input)(행\열)1231행1232행4563행789 2. 누적 합 표 (DP 테이블) 계산 dp[i][j] = dp[i-1][j] (위쪽 합) + dp[i][j-1] (왼쪽 합) - dp[i-1][j-1] (대각선 중복) + 원본[i][j][최종 완성된 DP 테이블](행\열)1231행1362행512213행1227453. 구간 합 구하기 예시[계산 공식] 결과 = dp[x2][y2] - dp[x1-1][y2] - dp[x2][y1-1] + dp[x1-1][y1-1] 예시 ) (2, 2)부터 (3, 3)까지의 합을 구하라고 한다면 전체 면적: dp[3][3] = 45위쪽 영역 빼기: dp[1][3] = 6 (1행 전체)왼쪽 영역 빼기: dp[3][1] = ..
드래그하면 정답 나옴1번. 당신은 회사 네트워크 관리자임. 아래 정보를 바탕으로 네트워크 정보를 산출해야 함.현재 장비 IP: 211.100.10.75서브넷 마스크: 255.255.255.224덩어리 크기: (256 - 마스크 숫자)덩어리 크기: 256 - 224 = 3232의 배수: 0, 32, 64, 96, 128...위치: 75는 64와 95 사이에 있음.네트워크 주소: (75가 속한 덩어리의 시작 번호)네트워크 주소: 211.100.10.64브로드캐스트 주소: 211.100.10.95브로드캐스트 주소: (해당 덩어리의 마지막 번호 96 -1) 211.100.10.65 ~ 211.100.10.94 유효 IP 범위: (기기에 할당 가능한 시작 ~ 끝 주소)211.100.10.65 ~ 211.100.1..
이진트리라서 2개 열만 만들었다. 알파벳을 인덱스화 해서 재귀탐색으로 구현했다.전위 중위 후위 순위 헷갈렸는데 문제에 친절하게 알려줌생각해보니 이름에 다 나와있네. 루트가 전 루트가 중 루트가 후import sysinput = sys.stdin.readlineN = int(input())tree = [[-1] * 2 for _ in range(26)]for _ in range(N): li = input().strip().split() par = ord(li[0]) - ord("A") if li[1] != ".": tree[par][0] = ord(li[1]) - ord("A") if li[2] != ".": tree[par][1] = ord(li[2]) - ..
1) 시나리오 및 주요 기능입력 데이터: 사용자 계정 리스트와 해당 패스워드 리스트.유효성 검사: 인자값(계정, 비번)이 입력되지 않으면 사용법을 출력하고 종료함.중복 체크: /etc/passwd 파일을 조회하여 이미 존재하는 계정인지 확인 후 생성함.반복 처리: for 문을 사용하여 리스트 내의 모든 사용자를 순차적으로 생성함.2) 관련 핵심 명령어useradd: 새로운 사용자 계정 생성.passwd: 계정의 비밀번호 설정. 스크립트 내에서는 echo "비번" | passwd --stdin "계정" 형태나 표준 입력을 활용함.wc -l: 결과값의 라인 수를 카운트하여 존재 여부(0 또는 1)를 판단함.3) 스크립트 코드 작성 (sudo nano adduser-script.sh)#!/bin/bashif ..