728x90
반응형
짝수번째 숫자만 치환
문제:
모든 짝수번째 숫자를 * 로 치환하시오.(홀수번째 숫자,또는 짝수번째 문자를 치환하면 안됩니다.)
Example: a1b2cde3~g45hi6 → a*b*cde*~g4*hi6
순서:
- 일반 String연산이 아니라 StringBuilder를 사용하여 메모리 할당을 최소화
- for문에서 charAt으로 문자를 하나씩 가져와서
- 두번째 문자 그리고 그 문자가 숫자일 경우 *을 대신 삽입
- 아닐 경우 본래의 문자열 삽입
출력문:
a*b*cde*~g4*hi6
public class EvenNChange {
public static void main(String[] args) {
StringBuilder result = new StringBuilder();
String ex = "a1b2cde3~g45hi6";
for(int i = 0; i<ex.length(); i++) {
if(i%2 !=0 && ('0'<= ex.charAt(i) && ex.charAt(i) <= '9')) {
// 매 2번째 문자 그리고 그 문자가 숫자일 경우 *을 대신 삽입
result.append('*');
}
else {
result.append(ex.charAt(i));
// 조건에 부합하지 않을경우 본래의 문자 삽입
}
}
System.out.println(result);
}
}
임의 숫자 배수 중 전부 1이 나오는 배수 값 자리수 구하기
문제:
2나 5로 나눌 수 없는 0 이상 10,000 이하의 정수 n이 주어졌는데, n의 배수 중에는 10진수로 표기했을 때
모든 자리 숫자가 1인 것이 있다.
그러한 n의 배수 중에서 가장 작은 것은 몇 자리 수일까?
= 말인 즉슨 3의 37배수는 111이므로 자리수가 3자리
순서:
- for문 무한반복문을 이용해 입력받은 input의 배수를 구한 후
- 그 배수를 String 값으로 변환
- String값을 charAt으로 1이 맞는지 일일이 확인한 후에 맞으면 count의 변수값을 누적합
- 누적합의 값이 String의 길이값과 동일할 경우 전부다 1이라는 의미이므로
- 그 결과값을 출력하고 프로그램 종료
출력문:
2와 5의 배수를 제외한 숫자를 입력하세요
13
값: 111111
값의 자리수: 6
public class Number111Counting {
public static void main(String[] args) {
int input = 0;
Scanner scanner = new Scanner(System.in);
while(input==0) {
try {
System.out.println("2와 5의 배수를 제외한 숫자를 입력하세요");
input = scanner.nextInt();
if(input%2 == 0 || input%5 == 0) {
throw new notvalidNumberException();
}
else if(input>10000) {
throw new Exception();
}
}
// ======== 오류 처리 구문 ========
// 그냥 2와 5의 배수가 아니거나 10,000이 넘으면 Exception으로 반복문 재반복
catch (notvalidNumberException e) {
System.out.println("2와 5의 배수를 입력하지마세요.");
input = 0;
continue;
}
catch (Exception e) {
System.out.println("10,000이상의 수를 입력하지마세요.");
input = 0;
continue;
}
}
// ======== 오류 처리 구문 ========
// ======== 실제 코드 작성 구문 ========
for(int i = 1 ;; i++) {
StringBuilder tmp = new StringBuilder();
tmp.append(i*input);
// 받은 input의 값을 배수로 구한 후에 String값으로 변환
int count = 0;
for(int j = 0; j<tmp.length(); j++) {
// String값의 문자열 길이만큼 charAt으로 1이 맞는지 하나씩 비교
if(tmp.charAt(j) =='1') {
count++;
// 맞으면 count에 누적합
}
}
if(count == tmp.length()) {
// 구한 count값이 배수의 길이와 동일하면 전부다 1이라는 의미이므로 아래에 그 결과값 도출
System.out.println("값: " + tmp);
System.out.println("값의 자리수: " + tmp.length());
break;
}
}
// ======== 실제 코드 작성 구문 ========
}
}
class notvalidNumberException extends RuntimeException{
}
728x90
반응형
'알고리즘 풀이 > Java' 카테고리의 다른 글
Level 2 코딩 문제풀이 - 다음 입사 문제, 숫자 사이클 길이 (0) | 2022.02.10 |
---|---|
Level 2 코딩 문제풀이 - 구글입사문제, 하위 디렉토리 파일 찾기 (0) | 2022.02.09 |
겹치는 숫자 제거 & OX 프린트 & 버전 크기 비교 - 코딩 문제 풀이 (0) | 2022.01.28 |
피보나치 & 숫자곱셈 - 코딩 문제 풀이 (0) | 2022.01.27 |