CS/Data Structure & Algorithm
[String] 9. 숫자만 추출
숫자 추출 기술 1. replaceALL()에 정규식을 할용한 숫자 추출 2. ASCII 코드의 활용으로 if문을 활용한 숫자 추출 3. Character.isDigit()을 활용한 숫자 추출 자연수 만들기 1. char 타입도 int와 계산 가능, ASCII 코드 48과 57 사이가 0~9 숫자 이므로 이를 이용하면 됩니다. 2. Integer.parseInt()를 활용하면 자동으로 앞에 0은 사라지고 int형에 맞게 자연수로 저장됩니다. import java.util.*; /** 1. replaceAll()에 정규식을 활용, 맨 첫번째 수가 0이 아니면 자연수 확정을 이용 정답 올릴 때 정수형 Integer로 해야한다. 2. ASCII 코드에서 정수형은 48 < i < 57임을 이용하여 숫자만 추출 ..
[String] 8. 팰린드롬
import java.util.*; /** 1. ASCII 코드를 이용해 직접 if문으로 알파벳만 따로 꺼내온 뒤 StringBuffer의 reverse() 를 이용해 문자를 뒤집고 원래 문자와 비교 2. String 메서드인 replaceAll() 정규식 이용 * Scanner 메서드 이용할 때 next()는 띄어쓰기가 있기 전까지 받고, nextLine()은 라인 전체를 받는다. * String 메서드는 직접 값이 바뀌진 않고 리턴만 해주니 str = 직접 값을 받아줘야 한다. */ class Main { public String solution(String str) { String answer = "NO"; str = str.toUpperCase().replaceAll("[^A-Z]", ""); S..
[String] 7. 회문 문자열
import java.util.*; /** 1. 다 대문자로 바꾼 후 toCharArray를 통해 배열로 받아서 left right 인덱스를 설정하고 인덱스를 통해 값을 비교 2. 다 대문자로 바꾼 후 charAt(left), charAt(length() - left - 1)을 비교. 1번에 비해 변수를 적게 사용하고 배열로 접근 안하고 객체의 메서드만을 이용해 해결 3. 문자열을 아예 통째로 뒤집어서 오리지날 문자열과 equals() 비교 */ public class Main { public String solution(String str) { String answer = ""; /* char[] t = str.toUpperCase().toCharArray(); int lt = 0; int rt = s..
[String] 6. 중복문자제거
import java.util.*; /** indexOf() 메서드는 특정 문자가 중복될 경우 맨 첫번째만 반환합니다. 이 특성을 이용하여 for문을 이용해 i가 인덱스와 똑같다면 중복되지 않은 인덱스이므로 answer에 추가하고 만일 똑같지 않다면 추가하지 않습니다. */ public class Main { public String solution(String str) { String answer = ""; for (int i = 0; i < str.length(); i++) { if (str.indexOf(str.charAt(i)) == i) answer += str.charAt(i); } return answer; } public static void main(String[] args) { Main..
[String] 5. 특정 문자 뒤집기
문제 설명 영어 알파벳과 특수문자로 구성된 문자열이 주어지면 영어 알파벳만 뒤집고, 특수문자는 자기 자리에 그대로 있는 문자열을 만들어 출력하는 프로그램을 작성하세요. 입력 첫 줄에 길이가 100을 넘지 않는 문자열이 주어집니다. 출력 첫 줄에 알파벳만 뒤집힌 문자열을 출력합니다. 예시 입력 1 a#b!GE*T@S 예시 출력 1 S#T!EG*b@a 직접 풀어보기 처음에 알파벳만 따로 추출해서 뒤집은 다음 원래 문자 배열에 재배치하려 했습니다. 하지만 배열 길이를 생각하지 못해 제대로 된 index 값을 갖지 못하는 오류가 발생했습니다. 풀이 1. left index가 알파벳인지 비교합니다. 2. 알파벳인 경우 right index가 알파벳인지 비교합니다. 3. 둘다 알파벳이면 문자를 서로 교환합니다. 4..
[String] 4. 단어 뒤집기
문제 설명 N개의 단어가 주어지면 각 단어를 뒤집어 출력하는 프로그램을 작성하세요. 입력 첫 줄에 자연수 N(3
[String] 3. 문장 속 단어
문제 설명 한 개의 문장이 주어지면 그 문장 속에서 가장 긴 단어를 출력하는 프로그램을 작성하세요. 문장속의 각 단어는 공백으로 구분됩니다. 입력 첫 줄에 길이가 100을 넘지 않는 한 개의 문장이 주어집니다. 문장은 영어 알파벳으로만 구성되어 있습니다. 출력 첫 줄에 가장 긴 단어를 출력한다. 가장 길이가 긴 단어가 여러개일 경우 문장속에서 가장 앞쪽에 위치한 단어를 답으로 합니다. 예시 입력 1 it is time to study 예시 출력 1 study 틀린 풀이 문장에서 단어를 처음부터 하나하나씩 저장하다가 띄어쓰기가 발견되면 비교해보는 방식으로 접근하였습니다. 하지만 문장 마지막은 띄어쓰기가 없으므로 마지막 단어는 비교를 하지 못하게 됩니다. 다른 방식의 접근이 필요했습니다. import jav..
Algorithm & Data Structure
알고리즘이란 알고리즘은 제한된 공간과 시간 안에서 데이터를 어떻게 처리할 것인지를 정해놓은 로직. 즉, '주어진 인풋으로 정의된 계산을 수행한 다음에 아웃풋 결과값을 내는 것' 좋은 알고리즘이란 제공된 데이터를 가능한 작은 공간과 가능한 빠른 시간안에 효율적으로 처리할 수 있는 알고리즘이다. 자료구조와 알고리즘을 공부하는 이유 좋은 프로그램을 만들기 위해서 좋은 프로그램은 속도가 빠르고, 효율적이며, 범용성이 높아야 합니다. 그 골격이 되는 좋은 알고리즘을 만들 필요가 있습니다. 프로그램의 좋고 나쁨을 판단하 baksakcci.tistory.com 알고리즘을 공부할 때 생각하면 좋은 포인트 Input의 사이즈가 커질수록 Big-O가 어떻게 변화하는지 공간 복잡도와 시간 복잡도는 어떤지 어떤 자료 구조를 ..
자료구조와 알고리즘을 공부하는 이유
좋은 프로그램을 만들기 위해서 좋은 프로그램은 속도가 빠르고, 효율적이며, 범용성이 높아야 합니다. 그 골격이 되는 좋은 알고리즘을 만들 필요가 있습니다. 프로그램의 좋고 나쁨을 판단하기 위해서 간단한 프로그램은 이미 누군가가 만든 프로그램의 일부분을 조합하는 것만으로도 쉽게 만들 수 있기 때문에 알고리즘을 의식할 기회가 점차 줄어듭니다. 알고리즘을 제대로 공부한 사람이면 프로그램의 소스코드를 분석해서 판단할 수 있게 됩니다. 하지만 누군가가 만든 프로그램의 알고리즘이 반드시 하나 뿐이라는 보장도 없습니다. 또한, 좋은 프로그램이라고도 말할 수 없습니다. 그리고 현업에서 프로젝트를 할때는, 대부분은 언어나 프레임워크나 라이브러리에서 이미 잘 만들어진 것들을 가져와서 우리가 만들고자 하는 기능에 맞게 가장..
[String] 2. 대소문자 변환
문제 설명 대문자와 소문자가 같이 존재하는 문자열을 입력받아 대문자는 소문자로 소문자는 대문자로 변환하여 출력하는 프로그램을 작성하세요. 입력 첫 줄에 문자열이 입력된다. 문자열의 길이는 100을 넘지 않습니다. 문자열은 영어 알파벳으로만 구성되어 있습니다. 출력 첫 줄에 대문자는 소문자로, 소문자는 대문자로 변환된 문자열을 출력합니다. 예시 입력 1 StuDY 예시 출력 1 sTUdy 풀이 1. 특정 문자열을 Scanner를 통해 받습니다. 2. solution 함수에서 text로 문자열을 받아들입니다. 3. 반복문을 사용해 한글자씩 비교하도록 하고, 조건문을 사용해서 한글자마다 소문자, 대문자 비교 후 바꿔서 출력하도록 합니다. 여기서 2가지 경우가 있습니다. 3-1 Character 클래스의 메서드..