백준 4

[Python] 파이썬으로 입력, 출력, 데이터 세팅하기

알고리즘 문제 사이트마다 입력과 출력 방식이 조금씩 다른데,프로그래머스는 로직만 작성하고 백준에서는 문제에 나와있는대로 입력과 출력까지 작성해야 한다.다양한 문제 풀이 환경에 대비해서 입력과 출력 방법을 알아두면 좋을 것 같다1. 입력 받기입력 값이 큰 경우를 대비해서input() 대신 sys.stdin.readline() 을 사용하는 것이 유리하다📌 기본 입력 처리import sysinput_func = sys.stdin.readlinen = int(input_func()) # 정수 하나 입력 받기arr = list(map(int, input_func().split())) # 한 줄에 여러 정수 입력 받기 sys.stdin.readline()은 개행 문자 (\n)도 같이 입력받기 때문에,strip()..

Python/알고리즘 2025.04.06

[백준/Java] 1193. 분수찾기

https://www.acmicpc.net/problem/1193 🧩  문제 설명무한히 큰 배열에 다음과 같은 분수들이 있을 때, x(입력값)번째 분수를 구하기1/1 -> 1/2 -> 2/1 -> 3/1 -> 2/2 -> ... 과 같은 지그재그 순서로 1번, 2번, 3번, ... 분수라고 지칭함💡 핵심 아이디어대각선 방향으로 분수가 나열되는 규칙을 파악하는 것이 핵심각 대각선에는 분수의 개수가 대각선 번호와 같고,그 대각선에 속하는 분수들의 분자와 분모의 합은 항상 (대각선 번호 + 1)이 된다예를 들어,1번째 대각선: 1/12번째 대각선: 1/2, 2/13번째 대각선: 3/1, 2/2, 1/3여기서 규칙은 대각선의 번호에 따라 탐색 순서가 달라진다는 것✅  알고리즘 흐름1. 대각선 번호 구하기입력..

알고리즘/백준 2025.03.27

[백준/Java] 10986. 나머지 합

🧩  문제 설명정수로 이루어진 수열이 주어졌을 때,부분 구간의 합이 M으로 나누어떨어지는 경우의 수를 구하는 문제!부분 구간은 연속된 구간이어야 함.범위: 1 ≤ N ≤ 1,000,000예시 입력:5 3 1 2 3 1 2 예시 출력:7💡 핵심 아이디어이 문제는 완전탐색(O(N²))으로는 시간 초과가 나기 때문에누적합(Prefix Sum) + 나머지의 개수 세기(counting)를 이용해서 O(N) 으로 해결해야 한다!📌  수학 개념sum[j] - sum[i] 가 M으로 나누어떨어진다⟺ sum[j] % M == sum[i] % M즉, 누적합의 나머지가 같은 두 시점을 고르면,그 사이 구간의 합은 M으로 나누어떨어짐!✅  알고리즘 흐름누적합을 계산하면서 M으로 나눈 나머지를 구함나머지 값의 등장 횟수..

알고리즘/백준 2025.03.23

빠른 입력 (Scanner vs BufferedReader)

알고리즘 문제를 풀 때 입력 속도는 매우 중요하다. 특히, 입력 데이터가 많으면 Scanner와 BufferedReader 중 어떤 것을 사용하느냐에 따라 실행 시간이 크게 차이 나서 시간 초과가 날 수도 있다.📌 결론부터 말하면?→ Java는 기본적으로 입력이 느리기 때문에 BufferedReader를 쓰는 것이 좋다!→ 단순한 문제에서는 Scanner도 괜찮지만, 대부분의 경우 BufferedReader + StringTokenizer 조합을 추천한다. 입력 방법속도장점단점Scanner느림공백 및 개행을 기준으로 쉽게 입력을 분리할 수 있음내부적으로 정규 표현식 기반 파싱을 하기 때문에 속도가 느림BufferedReader빠름버퍼를 활용하여 대량의 데이터를 빠르게 읽을 수 있음입력을 문자열로만 받기..

Java/알고리즘 2025.03.12