자바

    [백준] 2869 - 달팽이는 올라가고 싶다 (자바/Java)

    문제 땅 위에 달팽이가 있다. 이 달팽이는 높이가 V미터인 나무 막대를 올라갈 것이다. 달팽이는 낮에 A미터 올라갈 수 있다. 하지만, 밤에 잠을 자는 동안 B미터 미끄러진다. 또, 정상에 올라간 후에는 미끄러지지 않는다. 달팽이가 나무 막대를 모두 올라가려면, 며칠이 걸리는지 구하는 프로그램을 작성하시오. 입력 첫째 줄에 세 정수 A, B, V가 공백으로 구분되어서 주어진다. (1 ≤ B < A ≤ V ≤ 1,000,000,000) 출력 첫째 줄에 달팽이가 나무 막대를 모두 올라가는데 며칠이 걸리는지 출력한다. 처음에 while문으로 day를 하나씩 증가하도록 구현하였는데 시간 초과가 떴다 day를 V / (A-B)로 한다면, 정상에 올라간 후에는 미끄러지지 않는 조건 때문에 최소 일수를 구할 수 없다..

    [백준] 1316 - 그룹 단어 체커 (자바/Java)

    문제 그룹 단어란 단어에 존재하는 모든 문자에 대해서, 각 문자가 연속해서 나타나는 경우만을 말한다. 예를 들면, ccazzzzbb는 c, a, z, b가 모두 연속해서 나타나고, kin도 k, i, n이 연속해서 나타나기 때문에 그룹 단어이지만, aabbbccb는 b가 떨어져서 나타나기 때문에 그룹 단어가 아니다. 단어 N개를 입력으로 받아 그룹 단어의 개수를 출력하는 프로그램을 작성하시오. 입력 첫째 줄에 단어의 개수 N이 들어온다. N은 100보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에 단어가 들어온다. 단어는 알파벳 소문자로만 되어있고 중복되지 않으며, 길이는 최대 100이다. 출력 첫째 줄에 그룹 단어의 개수를 출력한다. String의 각 char들은, 중복된 글자가 없거나 있다면 자..

    [백준] 10989 - 수 정렬하기 3 (자바/Java) : 계수 정렬(Counting Sort)

    문제 N개의 수가 주어졌을 때, 이를 오름차순으로 정렬하는 프로그램을 작성하시오. 입력 첫째 줄에 수의 개수 N(1 ≤ N ≤ 10,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 수가 주어진다. 이 수는 10,000보다 작거나 같은 자연수이다. 출력 첫째 줄부터 N개의 줄에 오름차순으로 정렬한 결과를 한 줄에 하나씩 출력한다. 계수 정렬을 이용하는 문제이다. 처음에 입력 범위가 10,000인 걸 모르고 에러 남..하하 package BOJ0726; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStreamReader; import java.io.O..

    [백준] 2750 - 수 정렬하기: (자바/Java) 선택 정렬(Selection Sort)

    문제 N개의 수가 주어졌을 때, 이를 오름차순으로 정렬하는 프로그램을 작성하시오. 입력 첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000)이 주어진다. 둘째 줄부터 N개의 줄에는 수 주어진다. 이 수는 절댓값이 1,000보다 작거나 같은 정수이다. 수는 중복되지 않는다. 출력 첫째 줄부터 N개의 줄에 오름차순으로 정렬한 결과를 한 줄에 하나씩 출력한다. 선택 정렬로 result 배열을 새로 만들어 정렬하였다. 이중 for loop를 돌며 가장 작은 원소를 맨 앞으로 두는 과정을 반복한다. 시간 복잡도는 O(n^2)로, 상대적으로 비효율적인 알고리즘이다. package BOJ0726; import java.util.Scanner; public class BOJ_2750_수정렬 { public static ..

    [백준] 11651 - 좌표 정렬하기 2 (자바/Java) : Merge Sort

    문제 2차원 평면 위의 점 N개가 주어진다. 좌표를 y좌표가 증가하는 순으로, y좌표가 같으면 x좌표가 증가하는 순서로 정렬한 다음 출력하는 프로그램을 작성하시오. 입력 첫째 줄에 점의 개수 N (1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N개의 줄에는 i번점의 위치 xi와 yi가 주어진다. (-100,000 ≤ xi, yi ≤ 100,000) 좌표는 항상 정수이고, 위치가 같은 두 점은 없다. 출력 첫째 줄부터 N개의 줄에 점을 정렬한 결과를 출력한다. 이번에도 merge sort를 이용하여 풀었다. Collection의 sort와 comparable을 이용하면 좀 더 간단하게 될 것 같음! 비교하는 부분만 y 좌표가 같으면 x 좌표를 다시 비교하도록 구현하였다. package BOJ072..

    [백준] 1427 - 소트인사이드 (자바/Java) : 계수 정렬(Counting Sort)

    문제 배열을 정렬하는 것은 쉽다. 수가 주어지면, 그 수의 각 자리수를 내림차순으로 정렬해보자. 입력 첫째 줄에 정렬하려고 하는 수 N이 주어진다. N은 1,000,000,000보다 작거나 같은 자연수이다. 출력 첫째 줄에 자리수를 내림차순으로 정렬한 수를 출력한다. 자리수를 내림차순으로 정렬한다고 해서 계수 정렬(Counting Sort)가 생각 났다 계수 정렬은 O(N)의 시간 복잡도를 가지는 매우 빠른 정렬으로, 입력되는 숫자들의 범위가 작을수록 사용하기 좋다. 이 문제는 각 자리수를 정렬하는 것이니 0~9까지만 정렬하면 되기 때문에, 계수 정렬을 사용하여 빠른 정렬이 가능하다. 숫자를 String으로 입력 받아, charAt(i)를 이용하여 각 자리수를 int로 바꾸어 주었다. 그리고 0~9까지의..

    [백준] 2751 - 수 정렬하기2 (자바/JAVA): 합병 정렬(Merge Sort)

    [백준] 2751 - 수 정렬하기2 (자바/JAVA): 합병 정렬(Merge Sort)

    https://www.acmicpc.net/problem/2751 문제 N개의 수가 주어졌을 때, 이를 오름차순으로 정렬하는 프로그램을 작성하시오. 입력 첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 수가 주어진다. 이 수는 절댓값이 1,000,000보다 작거나 같은 정수이다. 수는 중복되지 않는다. 출력 첫째 줄부터 N개의 줄에 오름차순으로 정렬한 결과를 한 줄에 하나씩 출력한다. 처음에 선택 정렬을 썼다가 시간 초과가 나서 합병 정렬을 사용했는데도 시간 초과가 났다. 그래서 Scanner를 BufferedReader로, sysout println을 BufferedWriter로 바꿨는데도 시간 초과가 났다. 정렬 자체에 문제가 있는 것 같아서 질문을 ..

    [자바/Java] 클래스 다형성(Polymorphism)

    다형성 Animal > Person > Student 학생 객체 → 사람 관점 → 학생 관점 (O) 사람 객체 → 사람 관점 → 학생 관점 (X) Person s2 = new Student(); // 조상 클래스의 타입(Person)으로 자식 클래스 객체(Student)를 참조 //s2.study(); // 오류남.. Person으로 보고 있음 Student st = new Person(); // 참조 불가능 상속 관계에 있을 때 조상 클래스의 타입으로 자식 클래스 객체를 참조할 수 있다. 활용 다른 타입의 객체를 다루는 배열 Person[] persons = new Person[3]; persons[0] = new Person(); persons[1] = new Student(); persons[2] ..

    [자바/Java] 클래스(Class), 상속, 생성자(Constructor), 오버라이딩(Override)

    상속 확장성, 재사용성: 부모의 생성자와 초기화 블록은 상속x 클래스 선언 시 extends 키워드를 명시: 자바는 다중 상속X 관계 부모(상위, Super) 클래스 : Person 자식(하위, Sub) 클래스 : Student 자식 클래스는 부모 클래스의 멤버변수, 메소드를 자신의 것처럼 사용할 수 있다 Object 클래스는 모든 클래스의 조상 클래스 -별도의 extends 선언이 없는 클래스는 extends Object가 생략 super 키워드생성자 호출 순서: 부모 생성자 호출 → 자식(호출된 클래스) 생성자 호출 public class Person { String name; int age; public Person() { System.out.prinln("Person 생성자"); } public ..

    [자바/Java] 싱글톤(Singleton) 패턴, Static

    생성자가 여러 차례 호출되더라도 실제로 생성되는 객체는 하나이고, 최초 생성 이후에 호출된 생성자는 최초의 생성자가 생성한 객체를 리턴 public class Manager { private static Manager = manager = new Manager(); private Manager() {} public static Manager getManager() { return manager; } 기본 생성자를 private으로 → 외부에서 인스턴스를 새로 생성할 수 없음 getManager() 메서드는 인스턴스 생성과 상관없이 호출할 수 있어야 하기 때문에 반드시 static 용도/쓰임 여러 클래스에서 동시에 공유할 때 ex. 게임 - score cf. static class와 차이: Singleto..

출처: https://gmnam.tistory.com/157 [Voyager:티스토리]