백준

[Java/백준] 주몽 #1940
문제 풀이 (1) 문제 분석하기 두 재료의 번호의 합, 크기를 비교하므로 먼저 정렬하고 시작 N의 최대 범위가 15,000이므로 O(nlogn) 시간 복잡도 알고리즘(=정렬 알고리즘)을 사용해도 문제없음 정렬한 다음 양쪽 끝의 위치를 투 포인터로 지정해 접근(데이터가 유니크하고 한 번 쓰면 없어진다? → 투 포인터) (2) 손으로 풀어 보기 재료 데이터를 A[N]에 저장한 후 오름차순으로 정렬 투 포인터 i, j를 양쪽 끝에서부터 포인터 이동 원칙에 맞게 탐색 2단계를 i와 j가 만날 때까지 반복, 반복이 끝나면 count 출력 (N번만에 탐색이 끝남, 투 포인터는 시간 복잡도에 영향이 거의 없음) // 투 포인터 이동 원칙 A[i] + A[j] > M : j--; // 번호의 합이 M보다 크면 큰 번호..

[Java/백준] 연속된 자연수의 합 구하기 #2018
문제 풀이 (1) 문제 분석하기 N의 최댓값(10,000,000)이 매우 크므로 O(n)의 시간 복잡도 알고리즘 사용해야 함 → 투 포인터! 시작 인덱스와 종료 인덱스를 투 포인터로 지정하여 접근 (2) 손으로 풀어 보기 N값을 입력받아 변수에 저장하고, 사용할 변수(sum, count, start_index, end_index) 모두 1로 초기화 (count를 1로 초기화하는 이유는? 연속된 수가 자기 자신인 경우를 미리 포함한 것) 투 포인터 이동 원칙을 활용해 배열의 끝까지 탐색하면서 합이 N이 될 경우의 수를 구함 2단계를 end_index가 N이 될 때까지 반복 포인터가 이동할 때마다 현재의 총합과 N을 비교해 값이 같으면 count를 1만큼 증가 // 투 포인터 이동 원칙 sum > N : s..

[Java/백준] 구간 합 구하기 #11659
문제 풀이 (1) 문제 분석하기 수의 개수 N과 합을 구해야 하는 횟수 M은 최대 100,000 임 최악의 경우, 1억 회 이상 연산을 해야 하므로 1초 안에 계산을 끝낼 수 없음 → 구간 합 사용! (2) 손으로 풀어보기 // 합 배열 공식 S[i] = S[i-1] + A[i] // 구간 합 공식 S[j] - S[i-1] N개의 수를 입력받으면서 바로 합 배열 생성 i부터 j까지 구간 합 공식으로 정답 출력 배열의 index는 0부터, 합 배열의 index는 1부터 시작한다는 것에 주의하기! (3) 슈도코드 작성하기 N(숫자의 개수), M(질의 개수) 저장하기 for(1부터 N 까지) { 합 배열 생성하기(S[i] = S[i - 1] + A[i] } for(0부터 M 전까지) { 질의 범위 받기(i ~..

[Java/백준] 평균 구하기 #1546
문제 풀이 (1) 문제 분석하기 모든 점수를 입력받은 후, 최고점 별도로 저장해야 함 최고점으로 다시 계산해야 하는 변환 점수는 계산식을 정리하면 한 번에 평균을 구할 수 있음 ( A / M * 100 + B / M * 100 + C / M * 100 ) / 3 = ( A + B + C ) * 100 / M / 3 (2) 손으로 풀어보기 모든 점수를 1차원 배열에 저장 최고 점수와 점수의 총합을 구함 '총합 * 100 / 최고 점수 / 과목 수'를 계산 (3) 슈도코드 작성하기 변수 N에 과목의 수 입력받기 길이가 N인 1차원 배열 A[] 선언하기 for(A[] 길이만큼) { A[i]에 각 점수 저장하기 } for(A[] 길이만큼) { 변수 max에 최고 점수, 변수 sum에 총합 저장하기 } sum *..

[Java/백준] 개 #10172
문제 풀이 저번 고양이 문제처럼 이스케이프 문자(escape chracter)를 이용하여 출력하는 문제이다. class Main { public static void main(String[] args) { System.out.println("|\\_/|\n|q p| /}\n( 0 )\"\"\"\\\n|\"^\"` |\n||_/=\\\\__|"); } } 이렇게 제출했더니 컴파일 에러가 떴다. 엥? 나 제대로 적었는데? 아 C++로 제출했구나🤣 다시 JAVA11 로 제출해서 성공~

[Java/백준] 고양이 #10171
문제 풀이 이스케이프 문자(escape chracter)를 이용하여 화면에 원하는 그림을 출력하는 문제이다. class Main { public static void main(String[] args) { System.out.println("\\ /\\\n ) ( \')\n( / )\n \\(__)|"); } } 간단하게 성공! 하는 김에 이스케이프 문자를 정리해보았다! \\역슬래시 \'홑따옴표 출력 \"쌍따옴표 출력 \n줄바꿈 \t탭(일정한 간격) \b커서를 한 문자 앞으로(백스페이스) \r줄의 맨 처음으로(캐리지 리턴) \0빈 칸(null) 10171번: 고양이 아래 예제와 같이 고양이를 출력하시오. www.acmicpc.net

[Java/백준] We love kriii #10718
문제 풀이 public class Main { public static void main(String[] args) { System.out.println("강한친구 대한육군"); System.out.println("강한친구 대한육군"); } } 이렇게 직관적으로(?) 제출했는데 다른 답변을 보면서 문자열을 반복하는 다양한 방법을 알게 되었다. 1) for문을 이용하는 방법 public class Main { public static void main(String[] args) { for (int i=0; i

[Java/백준] Java 코드 제출 방법 #2557
문제 풀이 Java로는 처음 풀어보는 알고리즘이었는데 자꾸 에러가 나서 당황스러웠다; 아니 Hello World도 출력을 못해..? 세상에? error: class java is public, should be declared in a file named java.java 컴파일 에러의 정체는 바로 class 이름을 Main으로 설정하지 않은 것! public class Main { public static void main(String[] args) { System.out.println("Hello World!"); } } 이렇게 Main으로 제출하면 정상적으로 컴파일된다!! 2557번: Hello World Hello World!를 출력하시오. www.acmicpc.net