전체 글 55

[백준/C++] 1259번: 팰린드롬수 - 투 포인터와 인덱스 조건의 중요성

1. 문제 정보문제 번호: 1259번문제 이름: 팰린드롬수사용 언어: C++문제 링크: 백준 1259번 바로가기문제 요약: 앞뒤가 똑같은 단어(팰린드롬)인지 판별하는 문제. 'yes' 또는 'no'를 출력하며, 입력이 '0'이면 종료한다.2. 시행착오 (실패한 접근)처음에는 단순히 "가운데를 기준으로 양옆으로 뻗어나가며 비교하자"라고 생각했다. 그래서 문자열 길이가 짝수일 때와 홀수일 때를 나누어 middle 인덱스를 구하고, 반복문을 돌렸다.❌ 실패한 코드 (Index Out of Bounds) // 짝수일 경우int middle1 = size/2 - 1;// ...// 문제의 반복문 조건: i가 커지면 middle1 - i가 음수가 됨for(int i=0; i + middle1 [문제점 분석]조건문..

[백준/C++] 2798번: 블랙잭 - 인간의 직관 vs 컴퓨터의 무식함 (브루트 포스)

1. 문제 정보문제 번호: 2798번문제 이름: 블랙잭사용 언어: C++문제 링크: 백준 2798번 바로가기문제 요약:N장의 카드 중 3장을 골라 그 합이 M을 넘지 않으면서 M에 최대한 가깝게 만드는 문제다. 2. 접근 방법 (알고리즘)처음에는 "사람이 생각하는 방식"으로 접근했다.가장 큰 카드를 먼저 고르고, 남은 값에 맞는 카드를 찾고... 안 맞으면 다시 뒤로 돌아가고... 하는 식으로 복잡한 로직을 짰다.하지만 예외 처리가 너무 많아지고 코드가 꼬이기 시작했다.이 문제의 N은 최대 100이다.3장을 뽑는 경우의 수를 생각해보면 100 X 99 X 98 / 6 = 160,000번.컴퓨터는 1초에 약 1억 번의 연산을 할 수 있다. 따라서 복잡하게 머리 굴릴 필요 없이, 3중 반복문(for문)을 ..

[백준/C++] 1978번: 소수찾기- 제곱근을 이용한 최적화

1. 문제 정보문제 번호: 1978번문제 이름: 소수 찾기사용 언어: C++문제 링크: 백준 1978번 바로가기문제 요약:(소수는 1과 자기 자신으로만 나누어떨어지는 수이며, 1은 소수가 아니다.)주어진 N개의 수 중에서 소수(Prime Number)가 몇 개인지 찾아서 출력하는 프로그램을 작성하시오.2. 접근 방법 (알고리즘)소수를 판별하는 가장 기본적인 방법은 2부터 자기 자신 직전(N-1)까지 나누어보는 것이다. 처음 작성한 코드 #include #include using namespace std;int main() { int n; cin>>n; vector list; //벡터로 list 받기 for (int i = 0; i > value; list.push_bac..

[백준/C++] 1008번: A/B - float와 double의 차이 (정밀도)

1. 문제 정보문제 번호: 1008번문제 이름: A/B사용 언어: C++문제 링크: 백준 1008번 바로가기문제 요약:단, 실제 정답과 출력값의 절대오차 또는 상대오차가 10^{-9} 이하이어야 한다.두 정수 A와 B를 입력받아 A/B를 출력하는 프로그램을 작성하시오. 2. 접근 방법 (알고리즘)이 문제는 단순히 나눗셈을 하는 것이 아니라, "얼마나 정밀하게 소수점을 표현할 수 있는가?"를 묻는 문제다.문제 조건에 오차 범위가 적혀있다. 즉, 소수점 아래 9자리 이상 정확하게 출력해야 한다는 뜻이다.하지만 C++의 cout은 기본적으로 소수점 6자리까지만 출력하므로, fixed나 setprecision을 사용해 출력 자릿수를 늘려줘야 한다. 더 중요한 것은 변수의 자료형(Data Type) 선택이다. ..

[백준/C++] 1152번: 단어의 개수 - 문자열 공백 처리

1. 문제 정보문제 번호: 1152번문제 이름: 단어의 개수사용 언어: C++문제 링크: 백준 1152번 바로가기문제 요약: 영어 대소문자와 공백으로 이루어진 문자열이 들어온다. 이 문자열에 있는 단어의 개수를 구하는 프로그램을 작성하시오. 단, 단어는 공백 한 개로 구분되며, 문자열의 앞과 뒤에는 공백이 있을 수도 있다. 2. 접근 방법 (알고리즘)이 문제의 핵심은 "앞뒤 공백"과 "단어 사이의 공백"을 어떻게 처리하느냐이다. 단순히 공백의 개수 + 1로 계산하면, 앞뒤에 공백이 있거나 빈 문자열이 들어올 때 오답이 된다.따라서 상태 변수(Flag)를 활용한다. 문자열을 한 글자씩 순회inWord (현재 단어 안인지 판별하는 boolean 변수) 활용공백이 아닌 문자가 나왔는데, !inWord (방금..

[백준/Python] 4153번: 직각삼각형 - 정렬(sorted)과 내장 함수의 중요성

1. 문제 정보문제 번호: 4153번문제 이름: 직각삼각형사용 언어: Python문제 링크: 백준 4153번 바로가기문제 요약: 세 변의 길이가 주어졌을 때, 이 삼각형이 직각삼각형인지 판별하는 문제다. 입력은 여러 개의 테스트 케이스로 주어지며, 마지막 줄에는 "0 0 0"이 입력된다. 직각삼각형이면 "right", 아니면 "wrong"을 출력2. 접근방법직각삼각형을 판별하는 공식인 피타고라스의 정리를 이용한다. 가장 긴 변 c 를 설정하는 알고리즘이 필요하다. (입력받은 세 변의 순서가 오름차순이 아닐 수 있으므로) => 계산 전에 반드시 세 변의 길이를 오름차순으로 정렬해야한다. if 문을 사용해 a가 b보다 클 때 a가 c보다 크면 swap b가 더 큰 경우라면 c랑 스왑. 이러면 c에 가장 긴..

[백준/Python] 2563번: 색종이 - 2차원 배열과 좌표 정복하기

1. 문제 정보 문제 번호: 2563번문제 이름: 색종이사용 언어: Python문제 링크: 백준 2563번 바로가기2. 접근 방법 (알고리즘) 100X100 크기의 도화지에 10x10 크기의 색종이를 여러 장 붙인 후, 색종이가 붙은 영역의 총넓이를 구하는 문제입니다. 수학적으로 겹치는 넓이를 빼고 계산하려면 매우 복잡해집니다. => 대신 도화지를 2차원 배열로 만들고, 색종이가 붙은 부분을 1로 채우는 방식을 사용하면 쉽게 해결할 수 있습니다. 100x100 크기의 0으로 채워진 2차원 리스트(canvas)를 만듭니다.입력받은 좌표 (x, y)부터 가로 10칸, 세로 10칸을 순회하며 값을 1로 바꿉니다.이미 1인 곳에 또 색종이가 올라와도 그대로 1로 덮어쓰기 때문에 중복 처리를 따로 할 필요가 ..

자프실 프로젝트 7 - 코드 리팩토링

1. 문제 상황컨트롤러에서 귓속말을 보낼 때 recipientName → recipientId 변환을 위해 UserStateService.getUserIdByName()을 호출.그러나 항상 null이 반환되어 "사용자를 찾을 수 없습니다" 에러 발생.원인: UserStateService 내부의 userMap이 갱신되지 않음. 2. 원인 분석UserStateService는 updateActiveUsers(Map users) 메서드를 통해만 갱신됨.하지만 ChatService에서는 /topic/public, /user/queue/whisper, /user/queue/history만 구독하고 있었음.즉, 서버에서 내려주는 유저 목록(/topic/users)을 구독하지 않아 userMap이 비어있음. 3. 해결..

프로젝트 2025.12.06

자바프로젝트-5 클라이언트 시작! ChatService, userService

ChatServicepublic class ChatService { private final NetworkService netwrokService; //네트워크 통신담당 private final ObjectMapper objectMapper;//json 객체 변환기 private Long currentUserId;//현재 사용자 id //이벤트 리스너 (Controller가 등록) private Consumer onMessageReceived; public ChatService(NetworkService netwrokService) { this.netwrokService=netwrokService; this.objectMapper= new ObjectMapper(); this.objectMapp..

프로젝트 2025.12.06