본문 바로가기

전체 글46

PYTHON - 리스트와 딕셔너리로 개수 세기 Python 공부 글은 작은 집계 프로그램부터 시작해보려고 한다. 룰렛 결과가 꽝, 노래, 꽝, 댄스, 노래, 꽝 순서로 들어왔다고 가정하고, 항목별 횟수를 구하는 예제다. 실제 방송 데이터 대신 여섯 개의 문자열만 넣었다.필요한 것은 두 가지다. 들어온 결과를 차례로 보관할 리스트, 그리고 이름별 횟수를 저장할 딕셔너리다.결과는 리스트에 담기results = ["꽝", "노래", "꽝", "댄스", "노래", "꽝"]print(results[0])print(len(results))실행 결과:꽝6대괄호 []로 만든 리스트에 결과 여섯 건을 넣었다. 첫 번째 위치는 0이므로 results[0]은 "꽝"이다. 같은 문자열이 여러 번 나와도 그대로 보관한다. 지금은 그 중복이 집계할 원본 데이터다.이름별 횟수.. 2026. 10. 13.
HTML - 입력했는데 form 값이 빠지는 이유 예전에 form 요소를 정리하면서 id와 name의 역할을 적어뒀다. 그런데 처음 올렸던 로그인 예제에는 id만 있고 name이 빠져 있었다. 그 예제는 고쳤지만, 입력창이 멀쩡하게 보여도 값은 전송되지 않을 수 있다는 점을 따로 남겨두려 한다.이번에는 작은 폼을 만들어서 제출했을 때 어떤 값이 남는지 확인해봤다. 로그인 정보 대신 DGDD라는 예제 닉네임을 사용했다.id만 붙이면 어떻게 될까 닉네임 제출label을 누르면 입력창에 포커스도 간다. 입력도 되고 버튼도 눌린다. 하지만 제출 후 주소에는 nickname=DGDD가 붙지 않는다.id는 문서 안에서 요소를 식별하는 이름이다. label의 for와 연결하거나 CSS·JavaScript에서 요소를 찾을 때 사용한다. 폼 데이터를 만들 때 사.. 2026. 10. 13.
JAVA - Map으로 같은 값 개수 세기 List와 Set까지 정리했으니, 이번에는 이름에 값을 붙여 저장하는 Map을 써보려고 한다. 예제는 투표 집계다. JAVA, PYTHON, JAVA, HTML, PYTHON, JAVA라는 선택 결과에서 언어별로 몇 표를 받았는지 구해보자.List에 담으면 투표 여섯 건을 그대로 보관할 수 있다. Set에 담으면 어떤 언어가 나왔는지는 알 수 있지만, 같은 언어가 몇 번 나왔는지는 남지 않는다. 필요한 결과는 JAVA → 3처럼 언어와 횟수의 짝이다.이름으로 값을 찾는 MapMap은 키(key)로 값(value)을 찾는다. 이 예제에서는 언어 이름이 키이고, 투표 수가 값이다.Map counts = new HashMap();String은 키의 자료형, Integer는 값의 자료형이다. 제네릭의 타입 자리.. 2026. 10. 13.
뚜봇 룰렛 개발일지 1 — 첫 집계 테스트 뚜봇 룰렛에서 특정 결과가 나올 때마다 횟수를 쌓고, 그 숫자를 OBS에 띄우는 프로그램을 만들기로 했다. 이번에 만들 부분은 결과 하나를 받아 카운트를 1 올리는 데까지다. 화면 꾸미기보다 이 흐름부터 제대로 돌아가야 했다.2026년 6월 1일, 초기 구현과 첫 집계 테스트를 진행했던 과정을 적어본다.먼저 카운터부터 만들기처음 계획은 뚜봇 연동을 잠시 꺼두고, 수동으로 숫자를 바꾸는 카운터부터 만드는 것이었다. 입력을 받았을 때 값이 바뀌고, 다른 화면에도 전달되고, 다시 실행해도 저장한 값을 읽을 수 있는 구조가 먼저 필요했다.Python과 FastAPI로 서버를 만들고, 조작 화면과 OBS 화면을 웹페이지로 붙였다. 두 화면이 각자 숫자를 계산하면 값이 어긋났을 때 원인을 찾기 어려워진다. 그래서 .. 2026. 10. 13.
치지직 녹화 개발일지 1 — 첫 자동 녹화 치지직 채널을 등록해 두면 방송이 켜졌을 때 녹화를 시작하고, 끝나면 MP4로 남기는 프로그램을 만들기로 했다. 매번 방송 시작에 맞춰 녹화 버튼을 누르지 않아도 되는 것이 목표였다.2026년 8월 초에 만들었던 초기 버전부터 정리해보려고 한다. 이번에는 채널 등록, 방송 감시, 파일 저장을 연결하면서 겪은 문제를 적는다.녹화를 직접 구현하기보다 도구를 연결했다프로그램은 Python으로 만들고 화면은 Tkinter를 사용했다. 방송을 받아 파일로 저장하는 일은 Streamlink에, 저장한 파일을 MP4로 바꾸는 일은 FFmpeg에 맡겼다.내가 연결해야 할 흐름은 채널 등록에서 녹화 완료까지였다.채널 UUID 등록 ↓방송 상태 확인 ↓Streamlink 녹화 시작 ↓녹화 종료 ↓FF.. 2026. 10. 13.
JAVA - Set과 세 가지 구현체 같은 값을 한 번만 보관하고 싶을 때는 Set을 쓴다. 다만 중복을 없앤다는 성질과 순서를 유지한다는 성질은 따로 봐야 한다. HashSet, LinkedHashSet, TreeSet에 같은 값을 넣어 차이를 비교해보자.어떤 순서가 필요한가구현체순서주로 고르는 상황HashSet순회 순서 보장 없음값이 들어 있는지 빠르게 찾기LinkedHashSet일반적인 add 사용 시 삽입 순서중복을 없애되 들어온 순서 유지TreeSet자연 순서 또는 Comparator 기준정렬된 집합과 범위 검색HashSet의 기본 연산은 해시가 잘 분산되면 평균적으로 상수 시간에 가깝다. TreeSet의 기본 연산은 로그 시간이다. 실제 선택에서는 데이터 크기와 필요한 순서부터 생각하면 된다.같은 입력을 세 번 넣어보기아래 코드는.. 2024. 6. 24.
JAVA - List와 ArrayList 사용하기 List는 위치가 있는 목록이다. 같은 값을 여러 번 넣을 수 있고, 인덱스로 값을 읽을 수 있다. 목록을 만들 때 가장 먼저 써보기 좋은 구현체는 ArrayList다.추가하고 지우면서 확인하기아래 코드는 Main.java로 저장한다.import java.util.ArrayList;import java.util.Arrays;import java.util.List;public class Main { public static void main(String[] args) { List numbers = new ArrayList(Arrays.asList(1, 3, 4)); numbers.add(1, 2); System.out.println(numbers); .. 2024. 6. 21.
JAVA - 컬렉션 종류와 선택 기준 데이터를 여러 개 보관한다고 전부 같은 자료구조를 쓰지는 않는다. 순서가 필요한지, 중복을 없앨지, 이름으로 찾을지에 따라 출발점이 달라진다.필요한 동작부터 고르기하고 싶은 일인터페이스대표 구현체순서 있는 목록, 인덱스 접근ListArrayList, LinkedList중복 없는 집합SetHashSet, LinkedHashSet, TreeSet처리할 항목을 넣고 꺼내기QueueArrayDeque, PriorityQueue양쪽 끝에서 넣고 꺼내기DequeArrayDeque, LinkedList키로 값 찾기MapHashMap, LinkedHashMap, TreeMapMap은 컬렉션 프레임워크에 속하지만 Collection의 하위 인터페이스는 아니다. Set의 순서는 구현체마다 다르다. Queue도 전부 FIF.. 2024. 6. 21.