전체 글
[BOJ][Java] 15652번 - N과 M (4)
문제 백준 15652번 문제: N과 M (4) N과 M 시리즈 문제 해설 보러가기 [BOJ][Java] 15649번 - N과 M (1) [BOJ][Java] 15650번 - N과 M (2) [BOJ][Java] 15651번 - N과 M (3) [BOJ][Java] 15652번 - N과 M (4) 문제 설명 15651번 문제에서 비내림차순 조건이 추가된 문제이다. 비내림차순이므로
[BOJ][Java] 15651번 - N과 M (3)
문제 백준 15651번 문제: N과 M (3) N과 M 시리즈 문제 해설 보러가기 [BOJ][Java] 15649번 - N과 M (1) [BOJ][Java] 15650번 - N과 M (2) [BOJ][Java] 15651번 - N과 M (3) [BOJ][Java] 15652번 - N과 M (4) 문제 설명 1부터 n까지 중복 관계 없이 m개를 고르는 문제 15649번 문제에서 중복을 체크할 필요가 없어졌다. 그래서 앞의 문제들과는 다르게 방문 여부를 체크하는 visited 배열을 쓰지 않아도 됐다. 그리고 Scanner를 사용하면 시간 초과로 실패가 나와서 BufferedReader, BufferedWriter를 사용했다. 성공 코드 import java.io.BufferedReader; import j..
[BOJ][Java] 15650번 - N과 M (2)
문제 백준 15649번 문제: N과 M (2) N과 M 시리즈 문제 해설 보러가기 [BOJ][Java] 15649번 - N과 M (1) [BOJ][Java] 15650번 - N과 M (2) [BOJ][Java] 15651번 - N과 M (3) [BOJ][Java] 15652번 - N과 M (4) 문제 설명 15650번 문제에서 오름차순 조건이 추가된 문제이다. 수열의 첫 번째 수일 때 수열의 이전 수가 현재 수보다 작을 때 위의 두 가지 경우에만 재귀함수를 불러올 수 있도록 if문으로 조건문을 추가해 주었다. if (i == 0 || arr[i-1] < j) dfs(n, m, i+1);성공 코드 import java.util.Scanner; public class Main { static int[] ar..
[BOJ][Java] 2441번 - 별 찍기 - 4
문제 백준 2441번 문제: 별 찍기 - 4 문제 설명 첫째 줄에는 별 N개, 둘째 줄에는 별 N-1개, ..., N번째 줄에는 별 1개를 오른쪽 정렬로 찍는 문제 [BOJ][Java] 2440번 - 별 찍기 - 3 문제에서 별을 찍는 횟수를 N에서 뺀 개수만큼 공백이 출력되는 반복문을 추가하면 된다. 성공 코드 import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); sc.close(); for (int i = 1; i
[BOJ][Java] 2440번 - 별 찍기 - 3
문제 백준 2440번 문제: 별 찍기 - 3 문제 설명 첫째 줄에는 별 N개, 둘째 줄에는 별 N-1개, ..., N번째 줄에는 별 1개를 찍는 문제 이중 반복문을 통해 해결할 수 있다. 성공 코드 import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); sc.close(); while (n > 0) { for (int i = n; i > 0; i--) { System.out.print("*"); } System.out.println(); n--; } } }
[BOJ][Java] 15649번 - N과 M (1)
문제 백준 15649번 문제: N과 M (1) N과 M 시리즈 문제 해설 보러가기 [BOJ][Java] 15649번 - N과 M (1) [BOJ][Java] 15650번 - N과 M (2) [BOJ][Java] 15651번 - N과 M (3) [BOJ][Java] 15652번 - N과 M (4) 자연수 N과 M이 주어졌을 때, 아래 조건을 만족하는 길이가 M인 수열을 모두 구하는 프로그램을 작성하시오. 1부터 N까지 자연수 중에서 중복 없이 M개를 고른 수열 문제 설명 DFS(깊이 우선 탐색)를 사용해 백트래킹을 진행했다. DFS: 루트 노드(혹은 다른 임의의 노드)에서 시작해서 다음 분기(branch)로 넘어가기 전에 해당 분기를 완벽하게 탐색하는 방법, 대표적인 완전 탐색 방법, DFS 는 모든곳을 ..
[BOJ][Java] 10814번 - 나이순 정렬
문제 백준 10814번 문제: 나이순 정렬 문제 & 코드 설명 정렬 조건 1) 나이 2) 가입 순서 여기서 주의해야 할 점은 가입 순서이다. HashMap은 순서가 보장되지 않기 때문에 입력한대로 저장하기 위해서 이중 배열을 사용했다. 그리고 Arrays.sort에 Comparator를 사용해 나이를 기준으로 정렬했다. 가입 순서는 처음 입력한 순서만 유지되면 되므로 따로 순서를 저장할 필요는 없었다. 성공 코드 import java.util.Arrays; import java.util.Comparator; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner..
[BOJ][Java] 1181번 - 단어 정렬
문제 백준 1181번 문제: 단어 정렬 문제 설명 길이가 짧은 것부터 길이가 같으면 사전 순으로 정렬하고, 같은 단어는 한 번만 출력하는 문제 코드 풀이 1) HashMap에 단어들을 담는다. (words) 2) LinkedList에 HashMap의 메소드 중 하나인 entrySet을 사용해 key와 value를 모두 LinkedList로 넣는다. 여기서 entrySet에 의해 중복값이 걸러진다. - 여기서 LinkedList를 사용하는 이유는 HashMap은 순서가 보장되지 않기 때문에 순서를 유지시키기 위해서이다. 3) Collections.sort에서 Comparator를 사용해 우선순위에 따라 다르게 정렬되도록 한다. - 여기서 key는 문자열, value는 문자열의 길이이다. - 따라서 valu..
[BOJ][Java] 1032번 - 명령 프롬프트
문제 백준 1032번 문제: 명령 프롬프트 문제 설명 n개의 파일명을 입력받아 중복되지 않은 파일명의 부분을 ?로 출력하는 문제 처음에 문제를 제대로 안읽어서 파일명이 3개만 입력되는줄알고 하드코딩을 했다가 틀렸다ㅠ 제한시간이 2초라서 처음 입력된 값에 차례대로 하나씩 비교하게끔 했다. 일반 String으로 값을 받으면 값을 중간에 바꾸기가 번거로워서 StringBuilder를 사용해서 다른 값이 나오면 setCharAt()을 이용해 ?로 바꿔 주었다. 성공 코드 import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.n..
[BOJ][Java] 1100번 - 하얀 칸
문제 백준 1100번 문제: 하얀 칸 문제 설명 가장 위의 칸(0,0)이 하얀색이고, 하얀색은 검정색과 번갈아가며 칠해진다면, 하얀색 위에 있는 F는 몇 개일지 구하는 문제 하얀색 말의 조건 홀수번재 열일 때 홀수번째 행 짝수번째 열일 때 짝수번째 열 조건이 위와 같기 때문에 하얀색 말의 행열 번호의 합은 언제나 짝수이다. 이를 이용해 풀어도 된다. 나는 그냥 위의 조건을 if문과 for문을 활용해서 풀었다. 위 조건일 때 F가 등장하면 1씩 증가하게끔 해줬다. 성공 코드 import java.util.Scanner; public class BOJ1100 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); Stri..
[BOJ][Java] 2902번 - KMP는 왜 KMP일까?
문제 백준 2902번 문제: KMP는 왜 KMP일까? 문제 설명 입력된 이름들의 첫 글자만 모아서 출력하는 문제 이름이 -로 구문되어 있으므로 입력받으면서 split("-")을 이용해 배열에 저장한다. 그리고 각각의 요소마다 첫 글자만 String으로 누적해서 저장하고 최종 값을 출력한다. 성공 코드 import java.util.Scanner; public class BOJ2902 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String[] longName = sc.next().split("-"); sc.close(); String answer = ""; for (String name : longName)..
[BOJ][Java] 10808번 - 알파벳 개수
문제 백준 10808번 문제: 알파벳 개수 문제 설명 입력한 단어의 알파벳 개수를 각각 출력하는 문제. 알파벳 개수를 a부터 z까지 저장하는 26개 크기의 배열을 만든다. a가 아스키코드 번호 97이므로 0번부터 a, b, c,... 순서대로 저장하기 위해 for문을 돌며 97을 빼서 카운트한다. 처음 만든 배열을 출력하면 끝이다. 성공 코드 import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String s = sc.next(); sc.close(); int alpha[] = new int[26]; for (int i = 0; i < ..
[BOJ][Java] 2743번 - 단어 길이 재기
문제 백준 2743번 문제: 단어 길이 재기 문제 설명 단어가 몇 글자인지 출력하는 문제 length() 를 이용해 입력 글자의 길이를 출력하면 된다. 성공 코드 import java.util.Scanner; public class BOJ2743 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.print(sc.next().length()); sc.close(); } }
[BOJ][Java] 1475번 - 방 번호
문제 백준 1475번 문제: 방 번호 문제 설명 방 번호를 카드로 붙이려고 할 때 0부터 9까지 카드 세트가 몇 세트 필요할지 계산하는 문제 6과 9는 서로 뒤집어서 사용할 수 있기 때문에 입력할 때부터 9를 6이라고 대체시켰다. 따라서 9가 입력되도 6이고, 6은 한 세트로 2번까지 사용할 수 있다. 0부터 9까지인데, 9는 6이랑 같으므로 크기가 9인 배열을 만들어 번호마다 카운트를 해 준다. 여기서 6번 카드만 2번까지 사용할 수 있으므로 6번 카드가 홀수번 등장하면 나누기 2 한 값에 1을 추가해 세트를 올바르게 추가할 수 있도록 한다. 그리고 마지막에 정렬을 하는데, 정렬을 하는 이유는 가장 큰 값이 세트의 개수이기 때문이다. 나는 오름차순을 시켜서 제일 마지막 인덱스의 값을 출력하도록 했다. ..
[BOJ][Java] 2941번 - 크로아티아 알파벳
문제 백준 2941번 문제: 크로아티아 알파벳 문제 설명 문제에 제시된 크로아티아 알파벳 표를 이용해 입력된 단어의 크로아티아 알파벳 개수를 찾는 문제. 크로아티아 알파벳이 3글자로 표현되는 경우도 있어서 표의 크로아티아 글자 배열을 따로 만들었다. 크로아티아 배열을 활용해 for문을 돌며 contains()를 사용해 문자열에 크로아티아어가 존재하면 임의의 문자열인 1로 바꿔주었다. 단순히 크로아티아어 한글자의 의미이기 때문에 한 글자라면 어떤 문자도 상관 없다. for문이 끝나면 최종 문자열의 길이를 출력하면 된다. 성공 코드 import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc =..