본문 바로가기

컴퓨터 공학99

[백준] JAVA 자바 : 문자열 분석 (10820번) N개 줄의 문자열을 입력받아서 각 줄마다 소문자, 대문자, 공백, 숫자의 개수를 출력하는 문제다. 사실 크게 어렵지는 않은… 그것도 심지어 브론즈 문제인데 꽤나 헤맸다. 왜냐하면 난 BufferedReader으로는 EOF를 처리해본 적이 없거든… 그래서 찾아본 결과 while문의 조건으로 br.readLine()을 넣어준 후 다음 줄의 문자열이 존재할 경우 계속 돌리다가 더 이상 입력받을 줄이 없다면 null이 들어오므로 그 때 반복을 중지하는 형태였다. 그 외에는 뭐… ASCII코드로 공백, 소문자, 대문자, 숫자를 각각 구분해서 배열에 문자를 만날 때마다 각 빈도 수를 하나씩 늘려가는 형태로 쉽게 짤 수 있을 듯? import java.io.*; public class AnalyzeString_108.. 2024. 1. 20.
[백준] JAVA 자바 : 알파벳 찾기 (10809번) 앞에서 공부했던 알파벳 개수와 거의 동일한 문제인데, 배열 n_list에 빈도 수를 저장하는 게 아니라 문자열에서 처음으로 등장할 때의 인덱스를 저장하면 된다. 그 외엔 알파벳 개수와 동일함! import java.io.*; public class FindAlphabet_10809 { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringBuilder sb = new StringBuilder(); // 알파벳 별로 첫 인덱스를 담을 배열 생성 int[] n_list = new int[(int)'z' - (int.. 2024. 1. 20.
[백준] JAVA 자바 : 알파벳 개수 (10808번) 문자열을 입력받고, 그 문자열에 존재하는 알파벳(a~z)의 개수를 모두 세는 문제이다. 사실 문제도 되게 쉽고… 난이도만 봐도 브론즈 급이라서 어차피 알고리즘 공부하시는 분들이라면 큰 어려움 없이 푸실 수 있을 듯. 나 같은 경우는 그냥 알파벳의 빈도 수를 저장하는 int 배열 n_list를 만들어서 알파벳을 만날 때마다 +1 해주었다. import java.io.*; public class NumberOfAlphabet_10808 { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringBuilder sb =.. 2024. 1. 20.
[백준] JAVA 자바 : 후위 표기식 (1918번) 중위 표기식을 후위 표기식으로 바꾸는 문제이다. 분명 이거 작년에 자료구조 수업 들으면서 배웠는데… 하 알고리즘이 기억이 안 나서 한 시간 정도 애 먹었다… 아니 진짜 바본가 왜 이걸 생각을 못 하지?? 스택은 하나만 써도 충분하고, 알파벳을 만나면 그냥 바로 StringBuilder에 담으면 된다… 알파벳을 굳이 스택에 넣을 필요가 없는데 왜 계속 그걸 붙잡고 있었지????? 그리고 ‘(‘랑 ‘)’를 잘 처리해 줘야 한다… ‘(‘를 만나면 스택에 담지만, 이것을 스택에서 빼는 것은 그 어떤 연산자도 할 수 없고 오로지 ‘)’만이 가능하도록 설정해 주어야 한다. 그렇지 않으면 괄호의 우선순위가 이상해져버림. ‘+’와 ‘-‘는 모든 연산자를, ‘*’와 ‘/’는 ”와 ‘/’만 출력 가능한 것처럼 ‘(‘는 ‘.. 2024. 1. 20.
[백준] JAVA 자바 : 후위 표기식2 (1935번) 후위 표기식을 구현하는 문제이다. 사실 알파벳 마다 숫자를 대응시키는 것만 잘 해줬다면 큰 어려움 없이 쉽게 풀 수 있을 듯? 나 같은 경우에는 N개 만큼 배열 n_list를 만들어서 알파벳 A를 입력받으면 n_list[(int)A-65]에 그 수를 담고, 이후에 알파벳을 만나면 그 배열에서 수를 꺼내서 스택에 담는 형태로 코딩했다. 사실 나는 후위표기식에서 처음 pop()한 수가 오른쪽 피연산자가 되는 줄 모르고 계속 왼쪽에 두고 짰다가 이상한 결과가 나와서… 이번 기회에 제대로 배워간다… import java.io.*; import java.util.Stack; public class Postfix2_1935 { public static void main(String[] args) throws IOE.. 2024. 1. 20.
[백준] JAVA 자바 : 오등큰수 (17299번) 앞에서 공부했던 오큰수의 심화 버전이다. 오큰수는 그냥 단순히 수를 비교하면 됐는데, 오등큰수의 경우에는 수의 개수를 비교해야 한다. 사실 앞에 오큰수는 혼자 해결할 수 없어서 구글링을 해서 공부했는데, 그 방식을 머릿속에 익힌 뒤에 그걸 좀 응용해서 오등큰수를 해결했다. 어떻게 해결했냐? 사실 앞에서 배운 오큰수와 거의 같은 알고리즘을 사용한 것 같긴 한데… 차이점은 바로 n_list라는 빈도 수를 저장하는 배열을 만들어서 스택에서 요소를 꺼내면 그 요소끼리 비교하는 게 아니라, 그 요소의 빈도 수를 저장한 n_list[요소]를 비교하게 하는 거다. 자세한 건 아래의 코드에 주석을 참고하십셔! package BJoon.자료구조1; import java.io.*; import java.util.Stack.. 2024. 1. 20.
반응형