본문 바로가기

문자열80

백준 2713 자바 - 규현이의 사랑을 담은 문자메시지 (boj 2713 java) 문제 : boj2713 실버치고 구현이 상당히 빡쌘 문제이다. 아마 곧 골드까지 올라갈 것 같다. 이정도면 아무리 별다른 알고리즘 필요없는 구현문제라도 골드5정도가 맞다. 내 경우엔 최대한 원툴(?)로 구현을 하고 싶었다. 따라서 약간의 아이디어를 써서 좀 쉽게 진행했다. 다음의 입력을 확인해보자. 1 4 4 ACM 4x4일 경우, 그보다 2칸씩 크게 미리 배열을 만든다. 즉 6x6으로 만들고, 외곽을 1칸씩 띄운 상태로 중앙의 4x4에 '-1'과 같이 나올 수 없는 수를 쓴다. 해당 위치에 들어가야하는데 아직 값이 안들어갔다는 의미로 사용했다. 그리고 (1,0) 지점에서 시작하고, 처음 진행하는 방향은 항상 우측방향이다. 그리고 방향은 우측:0, 아래:1, 좌측:2, 위:3 으로 정한다. 소용돌이가 진.. 2022. 3. 29.
백준 14405 자바, 파이썬 - 피카츄 (boj 14405 java, python) 문제 : boj14405 1. 직접 찾아보자! 우선 정규식을 사용하지 않고 직접 찾는걸 확인해보자. 간단히 생각해서, 문자열에서 "pi", "ka", "chu"를 모두 나올 수 없는 문자로 변경해보자! 예를들어 "piakapichu"를 확인해보자. 이제 변경되지 못하고 남는 'a'가 보인다. 따라서 'NO'를 출력하면 된다. '&'만 있었다면 'YES'를 출력하면 된다. 그냥 삭제하지 않고 저렇게 자리를 남겨두는 이유는 'cpihu' 와 같은 경우 때문이다. 이 때 위 처럼 문자를 남긴다면 'c&hu'가 되어 chu를 변경할 수 없지만, 그냥 삭제하면 'chu'가 되므로 변경될 수 있다. 즉 올바른 답을 찾을 수 없다. 위와 같은 방식으로 짠 코드는 '코드1'에서 볼 수 있다. 2. 정규식을 사용해 찾아.. 2022. 3. 29.
백준 5698 자바 - Tautogram (boj 5698 java) 문제 : boj5698 원랜 브론즈는 해설을 작성하지 않으려 했으나, 블로그 유입인원 늘릴려면 아무래도 골플 문제보단 브론즈 문제가 더 이득인 것 같다. 문자열을 잘라내는 방법만 안다면 풀 수 있다. 자바의 경우 String에 대한 split함수 또는 StringTokenizer를 사용해서 자를 수 있는데, 결론적으로 후자가 더 빠르다. 이제 자를수만 있다면, 모든 잘라진 토큰에 대해 첫 character만 확인하면 된다. String에 대해 charAt(0)을 하면 첫 번째 character가 나온다. 이 때 소문자 혹은 대문자로 맞춰서 확인하는 것이 좋을 것이다. 그럼 해당 String에 대해 toLowerCase 후에 charAt(0) 으로 보면 바로 소문자가 나온다. 하지만 당연히 더 느리다. 따.. 2022. 3. 28.
백준 9242 자바 - 폭탄 해체 (BOJ 9242 JAVA) 문제 : boj9242 입력받은 문자열을 숫자로 변경만 할 수 있다면 6의 배수인지는 n%6==0 과 같이 쉽게 알 수 있다. 또한 코드는 8자리 이하라고 했으므로 최대 10^8-1의 값이므로 정수로 표현하는데에도 문제가 없다. 따라서 주어진 문자가 잘못된 문자인지 여부를 알 수 있고, 주어진 문자가 숫자로 무엇과 대응되는지만 알면 풀 수 있다. 그럼 주어진 문자를 주어진 기준문자(아래와 같은)와 비교만 잘 하면 된다. 이 때 주의점은 각 문자의 특징을 잡아서, 예를들어 마지막 열에 5개의 별표가 있다면 1 혹은 7일테니 첫번째 열에 *이 있다면 7, 아니면 1 이런방식은 틀린 입력값을 제대로 잡아낼 수 없다. 따라서 문자의 모든 위치(5x3)을 모두 비교하는게 맞다. 내 경우엔 우선 기준 데이터를 파싱.. 2022. 3. 21.
백준 11507 자바 - 카드셋트 (BOJ 11507 JAVA) 문제 : boj11507 1. 3글자씩 잘라서 각각의 카드를 판단할 수 있어야 함. 길이가 일정하므로 그냥 character 기준으로 3개씩 잘라내면 된다. 2. 똑같은 카드가 존재하는지 판단 '1'의 문자열을 가지고 HashSet을 사용하면 쉽게 동일 카드가 존재하는지 확인할 수 있다. 3. 얼마나 많은 카드를 잃어버렸는지 판단 '1'의 문자열에서 0번 인덱스의 문자(character)를 가지고 카운팅하면 된다. 즉, 첫번째 문자가 각각 P, K, H, T인 것의 개수를 센다. 이후 13-P개수, 13-K개수, 13-H개수, 13-T개수를 출력해주면 된다. 코드 : github import java.io.BufferedReader; import java.io.InputStreamReader; impor.. 2022. 2. 25.
백준 11468 자바 - Concatenation (BOJ 11468 JAVA) 문제 : boj11468 1. 우선 모든 경우의 수를 생각해보자. 예제 입력 1의 cat과 dog를 봐보자. 나올 수 있는 모든 경우는 다음과 같다. (cg, cog, cdog, cag, caog, cadog, catg, catog, catdog의 9가지) 이와같이 A와 B가 입력으로 들어온다면, 모든 경우의 수는 [A의 문자 수 x B의 문자 수] 임을 알 수 있다. 2. 그럼 언제 중복된 경우가 발생할까? bbb와 bzz를 확인해보자. 이와 같이 동일한 문자가 존재하는 경우 중복값이 발생한다. 다만 이 때, A 단어의 맨 앞 문자는 무조건 들어가야 하고(non-empty prefix), B 문자의 맨 뒤 글자도 무조건 들어가야 하므로(non-empty suffix) A 문자의 맨 첫문자와, B 문자의.. 2022. 2. 21.
백준 11609 자바 - Class Time (BOJ 11609 JAVA) 문제 : boj11609 order by last asc, first asc의 형태로 정렬하면 된다. 문자열을 입력 받아 띄어쓰기를 기준으로 나눌 줄 알고, 정렬하는 방법을 안다면 쉽게 풀 수 있다. 코드 : github import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.Arrays; import java.util.StringTokenizer; class Name implements Comparable { String first, last; public Name(String name) { StringTokenizer st = new StringTokenizer(name); first = st.nextToken.. 2022. 1. 29.
백준 3518 자바 - 공백왕 빈-칸 (BOJ 3518 JAVA) 문제 : boj3518 문제는 참 직관적이고 간단한 구현문제인데, 생각보다 꾸현이 까다롭긴 하다. 나온 설명대로 문자열 파싱만 잘 하면 되서 딱히 알고리즘적으로 설명할 건 없다. 주의점은 좀 있다. 첫째로 다음과 같은 경우를 보자. abc def zzz ggg 이미 문제에서 제시된 방식되로 잘 배치되어 있지만, '사전순으로 가장 앞서는 것'을 출력해야 하므로 공백을 1칸으로 줄여야 한다. abc def zzz ggg 두번째로 각 출력문의 마지막에 추가 공백이 있으면 안된다. 딱 출력해야 되는 문장에서 추가 공백 없이 그것만 출력해야 된다. 그 이외에는 백준에서 '출력 형식이 잘못되었습니다'이 뜬다. 코드 : github import java.io.BufferedReader; import java.io.I.. 2022. 1. 15.
백준 10465 자바 - Rolling Encryption (BOJ 10465 JAVA) 문제 : boj10465 1. 우선 문자열에서 k개를 그대로 출력한다. 이후 각 character마다 그 이전 k개의 문자열 중 가장 많이 나온 문자를 찾는다. 그리고 가장 많이 나온 문자(동일한 수가 나온게 있다면 알파벳에서 먼저 나오는걸로)만큼 쉬프트 시킨다(a면 1번, b면 2번, ..., z면 26번) 2. 문제만 보면 간단히 구할 수 있을 것 같은데, 문제는 k가 최대 10000이고 문자열의 길이가 최대 100000이므로 단순하게 각 character마다 이전 k개를 보게된다면 O(10000 * 100000)이 필요하므로 시간초과가 나게 된다. 이 경우 소문자는 총 26개이므로 별도 배열로 각 문자에 대해 세보면 더 효율적으로 가장 많이 나온 문자를 찾을 수 있다. "abbaabbac"에 대해 .. 2022. 1. 2.
백준 2757 자바 - 액셀 (BOJ 2757 JAVA) 문제 : boj2757 R값은 그냥 그대로 출력하면 된다. C값의 경우, 10진수를 26진수로 변경한다고 생각하면 좀 편하게 생각할 수 있다. C값은 뒤부터 한 자리씩 26으로 나눠보면서 맞는 문자를 매칭시키는 방식으로 찾을 수 있다. 코드 : github import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.StringTokenizer; public class Main { private void solution() throws Exception { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringBuilder answ.. 2021. 12. 28.