백준 1213번 팰린드롬 만들기
·
알고리즘/String(문자열)
1. 문제 2. 나의 풀이팰린드롬은 좌우 대칭이다.문자열과 구현 문제이기 때문에 어느 조건에서 팰린드롬을 만들 수 없는 지 생각했다. 처음에 팰린드롬이 될 수 없는 조건은 개수가 1개인 알파벳이 여러개인 경우라고 생각했다.그러나 조금 더 생각해보니 개수가 홀수인 알파벳이 여러개인 경우(2개 이상)이라고 생각했다. AAABBB가 팰린드롬을 만들 수 없는 것 처럼...각 문자의 개수를 카운팅하기 때문에 해시맵을 사용하고자 했다. 추가로 팰린드롬을 어떻게 만들어야할 까 고민이 많았는데 좌우 대칭이기 때문에 Left랑 Mid만 구하고 Right 부분은 Left를 역정렬 하면 된다.public class ac1213 { public static void main(String[] args) { S..
String(문자열) - 12. 암호
·
알고리즘/String(문자열)
1. 문제 알파벳 한 문자마다 #또는 *이 일곱 개로 구성되어있다. 1. 일곱자리의 이진수로 바꾸기 2. 바꾼 2진수를 10진수화 하기 3. 아스키번호를 통해 문자로 바꾸기 2 - 1. 나의 풀이 1. replaceAll을 사용해서 #을 1로, *을 0으로 변환했다. 2. String 배열을 num만큼 만들고 substring으로 추출한 String을 배열에 넣는다. 3. Integer.parseInt를 사용해 문자열을 2진수로 인식한 다음 이를 10진수로 바꿔준다. 그 다음 char형으로 형변환해준다. 2 - 2. 나의 코드 import java.util.Scanner; public class String12 { final static int SEVEN = 7; public static String s..
String(문자열) - 11. 문자열 압축
·
알고리즘/String(문자열)
1. 문제 같은 문자가 반복되는 경우 반복되는 문자 오른쪽에 반복 횟수를 표기하고 압축 반복횟수가 1이면 생략 2 - 1. 나의 풀이 1. i번째와 i + 1 번째를 비교한다. 2. 같다면 count 변수를 +1 한다. (count = 1로 초기화되어있음) 3. 다르다면 다른 문자라는 뜻이므로 count를 answer에 추가한다. 4. 다를 때 count = 1이면 그냥 넘어간다. count를 다시 1로 초기화한다. (반복횟수가 1이라는 뜻이므로) ArrayIndexOutOfBoundsException가 계속 나서 고민하다가 char[] 을 초기화할 때 기존의 크기 + 1 로 선언했다. i와 i + 1번째를 비교하므로 맨 마지막 요소까지 반복문이 실행되면 ArrayIndexOutOfBoundsExcept..
String(문자열) - 10. 가장 짧은 문자거리
·
알고리즘/String(문자열)
1. 문제 문자열 s 와 문자 t 가 주어지면 s의 각 문자가 t 와 떨어진 최소 거리를 출력하는 프로그램 2 - 1. 나의 풀이 처음 나의 풀이는 s가 kkkkkk t가 k 인경우에만 런타임 에러가 발생한다. 아무래도 배열 크기 문제 같다. t의 위치를 가지고있는 tlocation 배열을 만든다.(tlocation의 크기를 +1 하니까 런타임 에러가 고쳐졌다) 인덱스와 tlocation의 차이를 answer 에 작은 순으로 갱신한다. 어거지 코드라서 더 쉬운 방법이 있는게 분명하다 2 - 2. 나의 코드 import java.util.Arrays; import java.util.Scanner; public class String10 { public static int[] solution(String s..
String(문자열) - 9. 숫자만 추출
·
알고리즘/String(문자열)
1. 문제 문자와 숫자가 섞여있는 문자열을 숫자만 추출하여 자연수로 만든다. 2 - 1. 내 풀이 이 문제에서 중요한 건 숫자만 추출했을 때 맨 앞에 0이 있을 경우 이를 제거해야 한다는 것. 만약 문자열에서 추출한 숫자가 1104이면 그대로 출력해도 된다. 하지만 추출한 숫자가 01205이면 맨 앞의 0을 제거해야함. 어떻게 제거할까... while문의 조건식을 charAt(i) == 0 로 한다. 만약 조건식이 참이라면 해당 요소를 !로 바꾼다. 그리고 replace를 사용해 !를 ' ' 로 바꾸고 이를 trim()해서 없앤다. 2 - 2. 내 코드 import java.util.Scanner; public class String09 { public static String solution(Strin..
String(문자열) - 8. 유효한 팰린드롬
·
알고리즘/String(문자열)
1. 문제 팰린드롬: 앞에서 읽을 때나 뒤에서 읽을 때 같은 문자열 팰린 드롬이 입력되면 해당 여부에 따라 YES or NO를 출력 알파벳만 가지고 검사, 대소문자 구분 X 알파벳 이외의 문자들을 무시 2 - 1.나의 풀이 replaceAll() 메서드를 몰랐다. 내가 풀려고 했던 방향은 1. 알파벳만 따로 저장. 2. 알파벳만 저장한 문자열에 reverse() 사용 그리고 띄어쓰기가 있는 문자열은 nextLine()으로 받자. 2 - 2. 나의 코드 import java.util.Scanner; public class String08 { public static String solution(String str) { String answer = "NO"; String tmp1 = ""; str = str..
String(문자열) - 7. 회문 문자열
·
알고리즘/String(문자열)
1. 회문 문자열 회문 문자열: 앞이나 뒤에서 읽을 때 같은 문자열 회문문자열이면 "YES" 아니면 "NO" 단 대소문자는 구분하지 않는다. 2 - 1. 내 풀이 1. 입력 받은 문자열을 toLowerCase()로 소문자로 변환 2. 문자열을 뒤집는 반복문, 따로 저장 3. 뒤집은 문자열과 원래 문자열을 equals로 비교 2 - 2. 내 코드 import java.util.Scanner; public class String07 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String str1 = sc.next().toLowerCase(); char[] chArr = str1.toCharArray(); fo..
String(문자열) - 6. 중복 문자 제거
·
알고리즘/String(문자열)
1. 문제 중복된 문자를 제거, 순서는 유지 2. 나의 풀이 못 품! 3 - 1. 강의 풀이 여러개 있어도 맨 처음의 인덱스 번호를 반환하는 indexOf 메서드를 이용 3 - 2. 강의 코드 import java.util.Scanner; public class String06 { public static String solution(String str) { String answer =""; for (int i = 0; i < str.length(); i++) { //indexOf() 같은 값이 여러개 있어도 맨 앞의 요소를 반환함! if (str.indexOf(str.charAt(i)) == i) answer += str.charAt(i); } return answer; } public static v..
String(문자열) - 5. 특정 문자 뒤집기
·
알고리즘/String(문자열)
1. 특정 문자 뒤집기 특수문자는 그대로, 영어만 뒤집기 2-1. 나의 풀이 처음 풀었을 때 틀렸다. 이유는 아래와 같이 쉬운 경우만 생각했음. (특수 문자가 배열 가운데를 기준으로 대칭인 상황) a b ! ! f g 배열이 이러면 그냥 a, b ↔ f, g 만 바꾸면 되니까 쉽네? 라고 생각하고 간단하게 문자열 바꾸는 알고리즘을 쓰고 틀렸다. 더보기 for (int i = 0; i < tmpArr.length / 2; i++) { if((65