본문 바로가기

Algorithm/[BOJ] - JAVA

(173)
[백준] 10824 : 네 수 JAVA 풀이 1. 문자열을 입력 받는다. 2. A와 B를 연결한 값, C와 D를 연결할 값을 저장할 StringBuilder를 생성한다. 2. A B C D는 공백으로 나누어져 입력되므로, StringTokenizer를 사용해 쪼갠다. 3. StringBuilder.append()를 사용해 A와 B, C와 D를 이어붙인다. 4. 두 StringBuilder에 저장된 값을 Long으로 캐스팅한 후 더하고 출력해준다. 아무리 봐도 문제가 없어보이는데 자꾸 NumberFormat 런타임에러가 떠서 당황스러웠다. 다시 문제를 잘 읽어보니 A B C D 각각이 1,000,000까지도 가능하기 때문에 int로는 감당할 수 없는 값이 입력될 수도 있는 거였다. 문제를 꼼꼼히 읽는 게 참 중요한 것 같다. import java.i..
[백준] 11655 : ROT13 JAVA 풀이 1. 문자열을 입력받는다. 2. 13글자씩 민 문자열을 저장할 StringBuilder를 생성한다. 3. 문자열을 한 글자씩 검사해서 알파벳일 경우 13글자를 민다. 예를 들어 A라면 L이 되도록 하면 된다. 그런데 원래 알파벳이 O였다면 B가 되어야 한다는 점을 주의해야 한다. O는 15번째 알파벳인데 알파벳의 총 개수는 26개이기 때문에 단순히 O+13을 하면 28이 돼 알파벳의 개수를 넘어 전혀 상관없는 글자가 되기 때문이다. 따라서 14번째 알파벳인 N을 기준으로 N 이전의 알파벳이라면 +13을 하고 N 이후의 알파벳이라면 -13을 해주면 된다. 4. 각 자리의 알파벳을 상황에 맞게 변형시키고 StringBuilder.append()로 문자열을 생성한다. 알파벳이 아니라면 본래의 문자를 그대로 a..
[백준] 2743 : 단어 길이 재기 JAVA 풀이 String.length()로 문자열의 길이를 세고 출력만하면 되는 간단한 문제다. import java.io.*; public class Main{ public static void main(String[] args)throws IOException{ BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String str = br.readLine(); System.out.println(str.length()); } }
[백준] 10820 : 문자열 분석 JAVA 풀이 1. 소문자, 대문자, 숫자, 공백의 개수를 셀 int 배열 array를 생성한다. 2. 입력이 없을 때까지 문자열을 입력받는다. String 변수인 str에 br.readLine()으로 입력받은 내용을 저장했다. 그리고 str이 null이면(더 이상 입력되는 것이 없으면) 반복문을 종료한다. 3. str의 길이만큼 반복문을 실행한다. str의 한 글자 한 글자가 소문자인지, 대문자인지, 숫자인지, 공백인지 검사하고 그 개수를 array 배열에 저장한다. 4. array에 저장된 값을 출력한다. 5. array를 다시 0으로 초기화해준다. 필자는 이 과정을 빠트려서 처음엔 오답이 나왔었다... 한 문장의 대,소문자, 숫자, 공백의 개수를 세는 것이기 때문에 새로운 문장을 입력받을 때마다 이 배열을 꼭 초..
[백준] 1100 : 하얀 칸 JAVA 풀이 8x8인 체스판에서 흰색인 칸은 (0,0) (0,2) (0,4) (0,6) (1,1) (1,3) (1,5) (1,7) 등... 행 값을 i 열 값을 j라고 했을 때 i+j가 짝수인 경우이다. 따라서 체스판의 값을 입력받은 뒤에 i+j가 짝수이고, 그 자리에 'F'가 저장돼있다면 카운트를 증가시켜줬다. import java.io.*; import java.util.*; class Main{ public static void main(String[] args)throws IOException{ BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String[] str = new String[8]; for(int i=0;i
[백준] 1259 : 팰린드롬수 JAVA 풀이 단어를 앞에서부터 읽으나 뒤에서부터 읽으나 같을 때 팰린드롬이라고 한다. 그래서 문자열을 입력받았을 때 그 문자열을 뒤집고, 그것이 원본과 일치한다면 yes를 그렇지 않다면 no를 출력하도록 했다. import java.io.*; import java.util.*; class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); while(true) { String str = br.readLine(); if(str.equals("0")) { break; } StringBuffer sb = new StringB..
[백준] 1764 : 듣보잡 JAVA 풀이 듣도 못한 사람의 명단과 보도 못한 사람의 명단이 주어질 때 '듣도 보도' 못한 명단을 구해야 한다. 듣도 못한 사람을 ArrayList에 저장한 뒤, ArrayList.contains()로 보도 못한 사람이 포함된 경우에만 새로운 ArrayList에 저장하고 출력하려고 했지만 시간초과가 나왔다. System.out.print를 너무 많이 호출해서인가하고 StringBuilder로 바꿔봐도 결과는 시간초과였다. 검색해보니 ArrayList.contains()는 O(n)이 걸리는 게 문제였던 것 같다. HashSet의 contains() 메소드는 O(1)이 걸린다고 해서 듣도 못한 사람을 HashSet에 저장하고 그중에서 보도 못한 사람이 있는지 검사하는 방식으로 바꿨다. 1. N과 M을 입력받는다. 2...
[백준] 10808 : 알파벳 개수 JAVA 알파벳 개수만큼의 int 배열을 만들고 문자열을 입력받은 뒤 문자열 한글자씩 검사하면서 배열에 카운트해주면 된다. import java.io.*; import java.util.*; class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String str = br.readLine(); int[] cnt = new int[26]; for(int i=0;i