✅ 문제

스마트미디어인재개발원의 인쌤이 Java 시험문제를 채점하고 있다.
문제마다 'o' 또는 'x'로 표시가 되어 있는데 점수를 매기는 방식이 특이하다.
'o'는 점수가 누적되는 방식으로 채점되는데 이전부터 자신을 포함한 연속된 'o'의 개수 만큼의 점수로 채점이 됩니다.
예를 들어 'oooxoo'라는 표시가 있다면 순서대로 1+2+3+0+1+2=9 으로 총점이 계산됩니다.
학생이 푼 시험지에 정답, 오답 여부가 표시되어 있을 때 총점을 구하는 프로그램을 작성하세요.
✅ 코드
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String c = sc.nextLine();
int result = 0;
int adder = 1;
for (int i = 0; i < c.length(); i++) {
if (c.charAt(i) == 'o') {
result += adder;
adder++;
} else {
adder = 1;
}
}
System.out.println(result);
}
}
✅ 추론과정
1. 먼저 입력도구 Scanner를 꺼내와서 ox로 이루어진 채점 현황을 입력 받는다.
2. 입력받은 것을 String 타입의 변수 c에 담아주었다.
3. 정수형 변수 두 개를 선언해준다.
1) result 는 결과를 담아줄 변수이며, 점수를 누적해서 합산해줄 변수이다.
2) adder 변수는 o의 갯수가 늘어날 때마다 o의 점수가 될 변수이다. 처음에는 adder을 o가 한개 일때 점수인 1점으로 초기화 한다.
4. 입력받은 문자열의 길이만큼 for문을 돌려준다. charAt(i) 메서드를 사용하면 문자열에서 지정된 인덱스에 해당하는 문자를 반환한다. 문자열 한 글자 한 글자에 인덱스를 통해 접근할 수 있도록 해주는 메서드이다.
문자 하나하나가 o인지 x인지 확인하면서 o가 등장할 때마다 adder의 값을 1씩 증가해준다. 하지만 중간에 x가 등장하면 o는 다시 1점이 되어야 하기 때문에, charAt(i)가 x이면 adder의 값을 1로 다시 초기화 해 준다.
이 문제만 보면 코딩 처음 시작하던 시절이 생각난다. 정확히 이 문제였다. 그땐 여기서 왜 변수를 2개 선언해야 했는지 도통 이해가 가지 않았다. 그래서 여기 저기 물어보고 다녔는데도 결국 속 시원하게 이해하지는 못했다. 하지만 시간이 흐른 지금, 포스팅하려고 다시 풀어 보니까 진짜 별 거 아닌 문제였다.
아니, 이렇게 쉬운 게 그땐 왜 이렇게 어려웠을까? 이 글을 보시는 여러분들도 자바가 어렵다면 포기하지 말고 열심히 하세요. 나중에 졸업하실 때쯤에 아무것도 아니라고 확신합니다... 수업시간에 친구들이 힘들어 할 때마다, 늘 선생님께서 하시는 말씀이 있었다. 여러분들 몇 달만 지나면 저보다 훨씬 더 잘하실거예요 (이거 진짜예요!!)
지금 고생스럽더라도 잘 견뎌내면 나중에 오늘을 웃으면서 회상할 날이 반드시 올거라고 생각합니다^^;
'코딩테스트 > JavaFestival(스마트인재개발원)' 카테고리의 다른 글
[자바페스티벌] 29번 - 두 수의 합 맞추기 / 기회는 5번! (0) | 2024.03.29 |
---|---|
[자바페스티벌] 28번 - 문자열 형태의 2진수를 입력받아 10진수로 바꾸기 (0) | 2024.03.28 |
[자바페스티벌] 26번 - 세자리수 * 세자리수 연산 (세자리수끼리 곱하기) (1) | 2024.03.28 |
[자바페스티벌] 25번 - 숫자 입력 받아 대시의 개수 출력하는 프로그램(대시문자 '_') (0) | 2024.03.28 |
[자바페스티벌] 24번 - N과 X를 입력 받아 X보다 작은 수만 출력 (0) | 2024.03.28 |
✅ 문제

스마트미디어인재개발원의 인쌤이 Java 시험문제를 채점하고 있다.
문제마다 'o' 또는 'x'로 표시가 되어 있는데 점수를 매기는 방식이 특이하다.
'o'는 점수가 누적되는 방식으로 채점되는데 이전부터 자신을 포함한 연속된 'o'의 개수 만큼의 점수로 채점이 됩니다.
예를 들어 'oooxoo'라는 표시가 있다면 순서대로 1+2+3+0+1+2=9 으로 총점이 계산됩니다.
학생이 푼 시험지에 정답, 오답 여부가 표시되어 있을 때 총점을 구하는 프로그램을 작성하세요.
✅ 코드
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String c = sc.nextLine(); int result = 0; int adder = 1; for (int i = 0; i < c.length(); i++) { if (c.charAt(i) == 'o') { result += adder; adder++; } else { adder = 1; } } System.out.println(result); } }
✅ 추론과정
1. 먼저 입력도구 Scanner를 꺼내와서 ox로 이루어진 채점 현황을 입력 받는다.
2. 입력받은 것을 String 타입의 변수 c에 담아주었다.
3. 정수형 변수 두 개를 선언해준다.
1) result 는 결과를 담아줄 변수이며, 점수를 누적해서 합산해줄 변수이다.
2) adder 변수는 o의 갯수가 늘어날 때마다 o의 점수가 될 변수이다. 처음에는 adder을 o가 한개 일때 점수인 1점으로 초기화 한다.
4. 입력받은 문자열의 길이만큼 for문을 돌려준다. charAt(i) 메서드를 사용하면 문자열에서 지정된 인덱스에 해당하는 문자를 반환한다. 문자열 한 글자 한 글자에 인덱스를 통해 접근할 수 있도록 해주는 메서드이다.
문자 하나하나가 o인지 x인지 확인하면서 o가 등장할 때마다 adder의 값을 1씩 증가해준다. 하지만 중간에 x가 등장하면 o는 다시 1점이 되어야 하기 때문에, charAt(i)가 x이면 adder의 값을 1로 다시 초기화 해 준다.
이 문제만 보면 코딩 처음 시작하던 시절이 생각난다. 정확히 이 문제였다. 그땐 여기서 왜 변수를 2개 선언해야 했는지 도통 이해가 가지 않았다. 그래서 여기 저기 물어보고 다녔는데도 결국 속 시원하게 이해하지는 못했다. 하지만 시간이 흐른 지금, 포스팅하려고 다시 풀어 보니까 진짜 별 거 아닌 문제였다.
아니, 이렇게 쉬운 게 그땐 왜 이렇게 어려웠을까? 이 글을 보시는 여러분들도 자바가 어렵다면 포기하지 말고 열심히 하세요. 나중에 졸업하실 때쯤에 아무것도 아니라고 확신합니다... 수업시간에 친구들이 힘들어 할 때마다, 늘 선생님께서 하시는 말씀이 있었다. 여러분들 몇 달만 지나면 저보다 훨씬 더 잘하실거예요 (이거 진짜예요!!)
지금 고생스럽더라도 잘 견뎌내면 나중에 오늘을 웃으면서 회상할 날이 반드시 올거라고 생각합니다^^;
'코딩테스트 > JavaFestival(스마트인재개발원)' 카테고리의 다른 글
[자바페스티벌] 29번 - 두 수의 합 맞추기 / 기회는 5번! (0) | 2024.03.29 |
---|---|
[자바페스티벌] 28번 - 문자열 형태의 2진수를 입력받아 10진수로 바꾸기 (0) | 2024.03.28 |
[자바페스티벌] 26번 - 세자리수 * 세자리수 연산 (세자리수끼리 곱하기) (1) | 2024.03.28 |
[자바페스티벌] 25번 - 숫자 입력 받아 대시의 개수 출력하는 프로그램(대시문자 '_') (0) | 2024.03.28 |
[자바페스티벌] 24번 - N과 X를 입력 받아 X보다 작은 수만 출력 (0) | 2024.03.28 |