알고리즘 문제풀이 176

#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번째 장병은 수류탄을 무사히 받을 수 있다. 이 과정을 반복하다가 한 번이라도 수류탄이 땅에 떨어지면 실패 문구를 출력하고 프로그램을 종료한다. 수류탄이 무사히 마지막 장병에게 전달되면 성공 문구를 ..