알고리즘 문제풀이/백준 158

#1764 : 듣보잡

풀이방법 사용된 것: HashSet 집합 안에 특정 요소가 존재하는지 여부를 빠르게 파악하기 위해 사용하였다. TreeSet 요소 추가가 편리하고 자동으로 요소들을 정렬해주기 때문에 사용하였다. 2022.01.21 듣도 못한 사람들의 이름을 HashSet set1에 저장한다. 보도 못한 사람들의 이름을 하나씩 읽어오면서, set1에 포함되어있는 이름일 경우에만 TreeSet set2에 저장한다. set2의 크기를 화면에 출력한다. set2의 크기가 0이 아닐 경우, set2의 요소들을 forEach를 사용하여 화면에 순서대로 출력한다. 코드 Java(2022.01.21) import java.io.*; import java.util.HashSet; import java.util.TreeSet; publi..

#11091 : 알파벳 전부 쓰기

풀이방법 사용된 것: ArrayList 아스키코드 2022.01.21 26개의 요소를 가지고 있으며 모든 요소의 값이 0인 ArrayList list를 생성한다. a를 1번째 알파벳, b를 2번째 알파벳, ... z를 26번째 알파벳이라 부르자. 입력된 문장을 앞에서부터 한 글자씩 살피며, 해당 글자가 n번째 알파벳일 경우 list의 n번째 요소의 값을 1로 설정한다. 만약 입력된 문장이 팬그램이라면 list의 모든 요소의 값이 1로 바뀌고, 팬그램이 아니라면 list의 요소 중 하나 이상의 값이 0인 채로 남아있게 된다. 이를 이용해 팬그램 여부 및 문장에 등장하지 않은 알파벳이 무엇인지를 파악한다. 코드 Java(2022.01.21) import java.io.*; import java.util.Ar..

#6996 : 애너그램

풀이방법 사용된 것: ArrayList 2022.01.21 두 단어의 글자 수가 같은지 확인한다. 단어 수가 다르면 애너그램이 아닌 것으로 판단한다. 문자들의 아스키코드의 합이 같은지 확인한다. 이 값이 다르면 애너그램이 아닌 것으로 판단한다. 글자 수도 같고 아스키코드의 합도 같다면 다음의 방법으로 애너그램 여부를 판단한다. 0) int 타입 변수 check의 초기값은 0이다. 1) 첫번째 문자열의 문자들을 ArrayListlist1에 저장한다. 2) list1의 첫번째 글자(인덱스 0)가 두번째 문자열에 포함되어 있으면 check의 값을 1 증가시킨다. 그리고 한 단어에 여러 번 등장하는 글자로 인한 오류를 없애기 위해 list1의 첫번째 글자를 remove한다. 3) 2번의 과정을 문자열의 길이만큼..

#4583 : 거울상

풀이방법 2022.01.19 먼저 주어진 문자열의 거울상이 출력 가능한지 여부를 판단한다. 여기에는 int 타입 변수 v를 사용하였다. v의 초기값을 1로 설정한다. 주어진 문자열의 모든 문자를 살펴보면서, 거울상을 출력할 수 없는 문자가 하나라도 발견되면 v의 값을 0으로 설정한다. v의 값이 0으로 정해지면 "INVALID"를 출력한다. v의 값이 1로 정해지면 주어진 문자열을 마지막 글자부터 거꾸로 방문하면서 해당 글자의 거울상 문자를 즉시 화면에 하나씩 출력한다. 입력의 끝을 나타내는 "#"이 입력될 때까지 이를 반복한다. 코드 Java(2022.01.19) import java.io.*; public class Main { public static void main(String[] args) t..

#15904 : UCPC는 무엇의 약자일까?

풀이방법 2022.01.19 'U', 'C', 'P', 'C'가 저장된 문자 배열 init 을 선언한다. init을 탐색하는 데 사용되는 인덱스는 i이다. 입력 스트링을 한 단어씩 탐색한다. 탐색 대상 단어의 첫 글자가 init[i]가 아니라면 i의 값을 변경하지 않은 채 다음 단어로 넘어간다. 탐색 대상 단어의 첫 글자가 init[i]라면 i의 값을 1 증가시킨다. 이 과정을 진행하는 중에 i의 값이 4가 된다면 머리글자 'U', 'C', 'P', 'C'를 모두 찾은 것이므로 성공 문구를 출력하고 즉시 프로그램을 종료한다. 입력 스트링을 모두 탐색한 후에도 i의 값이 4보다 작다면 실패 문구를 출력하고 프로그램을 종료한다. 단, University CPC와 같이 한 단어 내에 여러 개의 머리글자가 포함..

#1026 : 보물

풀이방법 사용된 것: Arrays.sort 배열의 요소들을 정렬해준다. 더보기 Arrays.sort() 사용시 주의할 점 2022.01.14 B의 요소들의 순서는 바꿔선 안 된다는 조건은 신경쓰지 말자. 결과만 옳게 나오면 된다. 이거 신경 쓰다가 시간 버렸다. A를 오름차순으로, B를 내림차순으로 정렬한 뒤 S 함수를 수행하면 최솟값을 구할 수 있다. 코드 Java(2022.01.14) import java.util.Scanner; import java.util.Arrays; import java.util.Collections; public class Main { public static void main(String[] args) { // TODO Auto-generated method stub Sc..

#11656 : 접미사 배열

풀이방법 사용된 것: Arryas.sort 배열의 요소들을 사전순으로 정렬한다. StringBuilder 문자열을 편집할 수 있게 해준다. 2022.01.14 문자열이 소문자로만 이루어져있다는 것에서 착안하여, 문자열의 한 글자를 '0'으로 대체함으로써 지워나가는 방법을 선택했다. 앞 글자부터 차례차례 방문하여, 한 글자를 지우고 뒤의 나머지 부분을 접미사 배열에 저장 또 다음 글자를 지우고 나머지 부분을 접미사 배열에 저장 이 과정을 반복하였다. 코드 Java(2022.01.14) import java.util.Arrays; import java.util.Scanner; public class Main { public static void main(String[] args) { // TODO Auto-..

#15889 : 호 안에 수류탄이야!!

풀이방법 사용된 것: BufferedReader StringTokenizer 그리디 알고리즘 2022.01.13 각 장병은 (자신의 위치 좌표)+(자신의 사거리)만큼의 좌표까지 수류탄을 전달할 수 있다. (위치 좌표)+(사거리)를 '전달 가능 좌표'라 하자. 욱제부터 차례차례 장병들의 전달 가능 좌표를 살핀다. k번째 장병까지의 전달 가능 좌표의 최댓값보다 k+1번째 장병의 위치 좌표값이 크면 수류탄은 땅에 떨어진다. k번째 장병까지의 전달 가능 좌표의 최댓값보다 k+1번째 장병의 위치 좌표값이 작으면 k+1번째 장병은 수류탄을 무사히 받을 수 있다. 이 과정을 반복하다가 한 번이라도 수류탄이 땅에 떨어지면 실패 문구를 출력하고 프로그램을 종료한다. 수류탄이 무사히 마지막 장병에게 전달되면 성공 문구를 ..