Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- Pspice
- hc-sr04
- FND
- structural modeling
- uart 통신
- vivado
- verilog
- half adder
- prescaling
- behavioral modeling
- Edge Detector
- BASYS3
- pwm
- atmega 128a
- ATMEGA128A
- i2c 통신
- D Flip Flop
- Algorithm
- soc 설계
- ring counter
- test bench
- java
- Recursion
- DHT11
- gpio
- Linked List
- LED
- KEYPAD
- stop watch
- dataflow modeling
Archives
- Today
- Total
거북이처럼 천천히
알고리즘 (6월 7일) - (2) 본문
1. 문제 (코딩도장, 문자열 압축하기)
https://codingdojang.com/scode/465?answer_mode=hide
코딩도장
프로그래밍 문제풀이를 통해서 코딩 실력을 수련
codingdojang.com
2. 생각
문자열을 입력받아서, 같은 문자가 연속적으로 반복되는 경우에 그 반복 횟수를 표시하여 문자열을 압축하기.
입력 예시: aaabbcccccca
출력 예시: a3b2c6a1
- 임의의 String을 입력받는다.
- substring 메서드를 이용하여 문자 단위로 잘라서 해당 문자가 이전 문자와 같은지 비교한다.
- 같으면 counts를 하나 더하고, 다르면 이전까지의 문자와 반복 횟수를 newData에 추가한다.
- 마지막 문자에 도달하면 이전까지의 문자와 반복 횟수를 마지막으로 newData에 추가한다.
3. 풀이 및 코드 분석
import java.util.Scanner;
public class TestMain {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.println("문자열 입력하시오:");
String inputData = scan.next();
String newData = "";
String character = inputData.substring(0, 1);
int counts = 1;
for(int i=1; i<inputData.length(); i++) {
if(character.equals(inputData.substring(i, i+1))) {
counts += 1;
}else {
newData += character+String.valueOf(counts);
counts = 1;
character = inputData.substring(i, i+1);
}
if(i==inputData.length()-1) {
newData += character+String.valueOf(counts);
}
}
System.out.printf("입력: %s\n\n출력: %s\n", inputData, newData);
}
}
4. 메모
- substring(n, m) 메소드는 해당 문자열의 n번 위치에서부터 m번째 위치전까지 뽑아서 반환하는 메소드이다.
(주의. n ≤ 문자열 위치 < m 범위내의 문자, 문자열을 뽑기 때문에 범위 설정 주의하자.)
'Algorithm > 알고리즘 문제 풀이' 카테고리의 다른 글
알고리즘 (6월 9일) (0) | 2022.06.09 |
---|---|
알고리즘 (6월 8일) (0) | 2022.06.08 |
알고리즘 (6월 7일) (0) | 2022.06.07 |
알고리즘 (6월 6일) (0) | 2022.06.06 |
알고리즘 (6월 5일) (0) | 2022.06.06 |