전체 글 90

[백준알고리즘] 문자열 - 2908 상수 문제

문제 자체는 쉽게 풀었으나 다른 사람의 코드를 보고 얻어간것들을 조금이라도 더 작성하고자 한다. 오해하고 있었던 점이, nextInt()와 같은 메서드들을 여러번 사용하여 입력받을때 엔터로 줄바꿈을 해서 구분해야 한다고 생각했다. 그런데 꼭 그게 아니더라도 스페이스바(공백)로 구분해줘도 된다. nextInt는 공백(스페이스바), 탭문자, 개행문자(엔터)를 구분으로 해서 입력을 받는다. 물론 이 구분자들을 가져오지는 않는다. (그래서 다음에 nextLine이 오게되면 문제발생 여지가 있는것) next()도 마찬가지 나는 bufferedReader의 readLine()이 더 빠를 듯 하기도 해서,그리고 어차피 문자열로 바꿔야해서 이를 사용하긴 했으나 아무튼 참고해두자. 문제는 다음과 같이 풀었다. impor..

[백준알고리즘] 문자열 - 1152번 단어의 개수 문제

대소문자를 포함한 문장을 입력받고, 문장에 포함된 단어의 개수를 출력하는 문제이다. 같은 단어가 여러개 나온다고 하나로 칠 필요는 없고 각각 세면 된다. 주의할점은 입력받는 문자열의 맨 앞이나 맨 뒤에 공백이 들어갈 경우인데, 만약 단순히 입력받은 문자열에서 공백이 몇개인지를 세게 된다면 잘못된 결과가 나올수도 있다. 나는 readLine()으로 String을 입력받은뒤 구분자를 " "으로 두어 split()으로 나누어진 String들을 배열에 담았다. 만일 입력받은 String인 s의 맨 앞에 공백이 하나 있다면 words 배열 맨 앞자리에 빈 값이 들어갈 것이고 맨 뒤에 공백이 있다면 배열 맨 뒷자리에 빈 값이 들어가게 될 것이다. -> 엇 아니다..맨 뒤에 공백이 있는 경우에는 배열에 아무것도 넣어..

[백준알고리즘] 문자열 - 1157번 단어공부 문제

왜 문제 이름이 단어공부인지는 모르겠지만 아무튼 아스키코드표를 참고하며 코드를 다음과 같이 짜봤다. 얼마전에 배운 버퍼를 이용하여 입출력을 하는 방식을 썼고 입력받은 문자열의 각 문자들의 횟수를 카운트 하는것은 전에 풀었던 10809번 알파벳 찾기 문제에서와 같이 a~z까지의 26크기의 int형 배열을 만들었다. 입력받은 문자열을 우선 char 배열로 만들고 (toCharArray()) foreach문을 이용하여 배열에 있는 문자들을 하나씩 꺼내어 소문자인지 혹은 대문자인지를 판단하고, 소문자라면 - 'a' 대문자라면 - 'A' 연산을 해주어 alpCount배열에서의 인덱스를 찾고 해당 위치의 값을 1씩 증가시켰다. 동시에 alpCount 배열 내에서 가장 큰 값 또한 구해준다(max) 그리고 for문을..

[JAVA] BufferedReader/BufferedWriter 사용하기

여태껏 System.out.print();가 익숙해서 이것만 써왔는데 속도 측면에서 BufferedReader/BufferedWriter가 훨씬 성능이 좋기 때문에 이제 이를 이용하여 문제를 풀어보려 한다. 다른 사람들이 자바로 백준 문제 푼걸 보면 대부분 이걸 사용해서 풀고 있음을 볼 수 있다.. Scanner -> BufferedReader System.out.println(); -> BufferedWriter 이들의 특징은 enter만을 구분하며, 받은 데이터가 String으로 고정되기 때문에 입력받은 데이터를 추가적으로 가공할 필요가 있다. 예를들어 입력값에 숫자가 들어간다면 parseInt를 통해 int형으로 변환해줄 필요가 있다. 이들을 사용하기 위해서는 먼저 다음과 같은 클래스들을 impor..

JAVA 2022.07.18

[백준알고리즘] 문자열 - 2675번 문자열 반복 문제

첫째줄에 테스트 케이스의 개수가 주어지고, 다음줄부터 테스트 케이스만큼 각 반복할 문자의 횟수와 문자열(또는 문자)를 입력값으로 하여 반복한 문자열을 출력하면 되는 간단한 문제이다. import java.util.Scanner; public class stringRepeat { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int repeat; //각 문자 반복할 횟수 String str; //반복시킬 문자열 int testCaseNum = sc.nextInt(); //주어질 테스트 케이스의 수 int[] rpNums = new int[testCaseNum]; String[] strs = new String[te..

[백준알고리즘] 문자열 - 10809번 알파벳 찾기 문제

쉽지만 놓치고 간 부분들이 있던 문제. .length를 해놓고 오류표시선이 뜨길래 왜지??저번에도 잘만 썼는데..했는데 length()와 length의 차이를 염두에 두고 있지 않아서 그랬다. length()는 배열 길이를 구하는 함수, length는 문자열의 길이를 구하는 함수라는 차이가 있다! 반대로 적어놓음..length()가 문자열 길이 구하는 함수, length는 배열길이 구하는 함수 예제로 입출력을 해보고 이상한점이 있었다. package Level6; import java.util.Arrays; import java.util.Scanner; public class fineAlphabet { public static void main(String[] args) { int[] alpIndex =..

[백준알고리즘] 문자열 - 11720 숫자의 합 문제

문제 자체는 쉽지만 nextLine과 next의 차이가 뭔지, 숫자 문자열을 어떻게 아스키코드 말고 그대로의 숫자로 만들지에 대해 고민했던 문제다. 1. Scanner 클래스의 nextLine은 입력을 받을때 버퍼에 남아있는 개행문자를 읽어들이는 반면, next는 개행문자는 이를 무시한다. 따라서 여러 줄을 입력하고자 할때 nextLine이 문제가 될 여지가 있다. 예를들어 nextInt, nextLine을 연이어 쓴다면 입력할때 콘솔창에 숫자를 입력하고 엔터를 누르는 순간 그 다음줄에 뭔가를 치기도 전에 nextLine이 개행문자를 읽어버려 입력이 끝나게 되어 버리는 것이다. 따라서 연이어 뭔가를 입력하고자 할 때 nextLine을 일부로 한번 넣어 버퍼를 비우고 그 다음에 nextLine을 다시 사용..

[백준알고리즘] 문자열 - 11654번 아스키코드 출력 문제

입력받은 문자나 숫자를 아스키코드값으로 바꾸어 출력하는 간단한 문제다. 자바에서 char을 입력받는 법을 잊어버렸다가 구글링해서 기억해냈다. 숫자를 입력할수도 문자를 입력할수도 있으나 상관없이 문자로 받는다. 자바의 Scanner는 문자를 입력받는 기능이 없어서 일단 문자열로 입력받은후, charAt(0)으로 첫번째 문자를 꺼내는 과정을 거쳐야한다. 여기서 0은 문자열에서 꺼내올 문자의 인덱스인데 어차피 한개의 문자를 입력할것이기 때문에 0으로 한다. 나는 이것을 ch에 먼저 char형으로 저장한뒤 따로 int타입으로 강제형변환시켜 in에 할당하여 숫자로 만들고자 했었다. 안되는건 아니지만 우선 char형에서 int형변환 시킬때는 강제형변환이 필요가 없다. 더 작은 데이터 타입에서 더 큰 데이터 타입으로..

[백준알고리즘] 함수 - 1065번 한수 문제

내가 이 문제를 어려워했던 이유는, 입력받을 수의 자릿수를 모르는 상황에서 수의 각 자릿수들을 어떤 방법으로 비교해야하나 고민이 많았기 때문이다. 처음에 삽질을 하고 있었다. 등차수열이란 동일한 순서에 따라 차를 구한 값들이 같아야 하는 건데(123, 246처럼) 세자리수의 입력이 들어왔을때, 십의자리와 일의자릿수를 비교하는 방법을 말도 안되게 구현해 놓고 있었다..왜그랬는지 지금도 이해x (예를들어 123이라는 입력값이 들어올때 120과 123의 차를 구하고(3), 또 12에서 1과 2의 차(1)를 구해서 비교하던 말도안되는 상황) 코드를 갈아엎어야한다. 그러나 입력되는 수의 자릿수가 정해져있지 않았다는 점에서 쉽게 생각이 나질 않았다. 결국 구글링을 해보고 얻은 깨달음..! 맞다 100보다 작은 수들..

알고리즘/함수 2022.07.06

[백준알고리즘] 함수 - 4673번 셀프 넘버 문제

알고리즘 공부를 정말 하려고 마음먹고 오랜만에 시도한 문제. 앞까지의 문제들은 다 쉬워보여 이것부터 풀어보고자 첫 문제로 선택했는데, ..문제가 크게 어렵진 않은 것 같아 보였는데 막상 코드로 옮기려고 하니 쉽지 않았다. 뭐든 개념 자체는 간단해보여도 코드로 구현하는것이 어렵구나 느낀다. 학기내내 C++만 쓰다가 간만에 자바로 하려니 헷갈리기도 하다. 냅다 코드를 갈기다가 이런식으로 더 코드를 짜봤자 더 볼것도 없이 시간초과겠구나 싶어 그만두고 더 좋은 코드를 참고하기로 했다. 정말 부끄러울 정도로 비효율적인 (심지어 짜다 만)코드지만, 나는 고작해야 이제 막 공부중인 학생 아니겠는가.. 모범답안(?)과 비교하며 셀프 공개처형을 자행하기로 한다.. 갈기다 만 selfNum 함수 코드는 다음과 같다. 부끄..

알고리즘/함수 2022.06.30