1단계 문자와 문자열
- 새싹을 출력한다.
public class Step_1 {
public static void main(String[] args) {
System.out.print(" ,r'\\"7\\n"
+ "r`-_ ,' ,/\\n"
+ " \\\\. \\". L_r'\\n"
+ " `~\\\\/\\n"
+ " |\\n"
+ " |");
}
}
A.
- 빈칸 없이 출력한다.
2단계 킹, 퀸, 룩, 비숍, 나이트, 폰
- 첫째 줄에 동혁이가 찾은 흰색 킹, 퀸, 룩, 비숍, 나이트, 폰의 개수가 주어진다. 이 값은 0보다 크거나 같고 10보다 작거나 같은 정수이다.
- 첫째 줄에 입력에서 주어진 순서대로 몇 개의 피스를 더하거나 빼야 되는지를 출력한다. 만약 수가 양수라면 동혁이는 그 개수 만큼 피스를 더해야 하는 것이고, 음수라면 제거해야 하는 것이다.
import java.util.Scanner;
public class Step_2 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int[] intArr1 = {1, 1, 2, 2, 2, 8};
int[] intArr2 = new int[6];
for (int i=0; i<6; i++) {
intArr2[i] = scan.nextInt();
}
for (int i=0; i<6; i++) {
intArr1[i] -= intArr2[i];
}
for (int i=0; i<6; i++) {
System.out.print(intArr1[i]+" ");
}
}
}
A.
- int 배열을 둘 만든다.
- intArr1에는 각 기물의 개수를 대입한다.
- intArr2는 길이가 6인 배열로 초기화 한다.
- 반복문을 이용하여 입력 받은 숫자를 int 단위로 읽어 intArr2에 대입한다.
- intArr1에서 intArr2의 값을 빼주는 반복문을 만든다.
- intArr1의 값을 출력하는 반복문을 만든다.
3단계 별 찍기 - 7
- 첫째 줄에 N(1 ≤ N ≤ 100)이 주어진다.
- 첫째 줄부터 2×N-1번째 줄까지 차례대로 별을 출력한다.
import java.util.Scanner;
public class Step_3 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int test = scan.nextInt();
for (int i = 0; i<test; i++) {
for (int j=0; j<test-i-1;j++) {
System.out.print(" ");
}
for (int j=0; j<2*i+1; j++) {
System.out.print("*");
}
System.out.println();
}
for (int i=0; i<test-1; i++) {
for (int j=0; j<i+1; j++) {
System.out.print(" ");
}
for (int j=0; j<2*test-2*i-3; j++) {
System.out.print("*");
}
System.out.println();
}
}
}
A.
- 입력 받은 숫자를 int로 받아준다.
- 별 개수가 늘어나는 식을 먼저 반복문으로 만들어준다.
- 반복문 내부에 반복문을 2개 만든다. 첫 반복문은 빈칸을 만드는 반복문, 뒤의 반복문은 별을 찍는 반복문으로 한다.
- 빈칸은 숫자-1개의 빈칸부터 1씩 줄어드는 반복문을 만든다.
- 별의 개수가 2n-1개씩 찍히는 반복문을 만든다.
- 다음 반복문으로 별 개수가 줄어드는 반복문을 만든다.
4단계 팰린드롬인지 확인하기
- 첫째 줄에 단어가 주어진다. 단어의 길이는 1보다 크거나 같고, 100보다 작거나 같으며, 알파벳 소문자로만 이루어져 있다.
- 팰린드롬이란 앞으로 읽을 때와 거꾸로 읽을 때 똑같은 단어를 말한다.
- 첫째 줄에 팰린드롬이면 1, 아니면 0을 출력한다.
import java.util.Scanner;
public class Step_4 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
String str = scan.next();
char[] spell = new char[str.length()];
for (int i=0; i<str.length(); i++) {
spell[i] = str.charAt(i);
}
int show=1;
for (int i=0; i<str.length(); i++) {
if (spell[i] != spell[str.length()-1-i]) {
show = 0;
}
}
System.out.println(show);
}
}
A.
- 입력받은 문자를 str로 대입한다.
- 문자 배열을 선언하고 길이가 str.length인 기본 값으로 초기화한다.
- 반복문을 통해 str의 각 문자를 spell에 대입한다.
- 출력을 위한 int변수를 선언하고 1로 초기화한다.
- 반복문을 만들고 각 배열의 반대되는 배열과 비교하여 같지 않은 다면 show를 0으로 만드는 반복문을 만든다.
- 반복문을 통해 반대되는 배열의 값이 모두 같다면 1, 하나라도 틀리다면 0이 되어 팰린드롬을 판별할 수 있다.
- show를 출력한다.
5단계 단어 공부
- 첫째 줄에 알파벳 대소문자로 이루어진 단어가 주어진다. 주어지는 단어의 길이는 1,000,000을 넘지 않는다
- 첫째 줄에 이 단어에서 가장 많이 사용된 알파벳을 대문자로 출력한다. 단, 가장 많이 사용된 알파벳이 여러 개 존재하는 경우에는 ?를 출력한다.
import java.util.Scanner;
public class Step_5 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
String str = scan.next();
int length = str.length();
char[] alp = new char[length];
int[] count = new int[26];
for (int i=0; i<length; i++) {
alp[i] = str.charAt(i);
}
for (int i=0; i<length; i++) {
for (int j=0; j<26; j++) {
int a = alp[i];
if (a==j+65) {
count[j]++;
break;
}
if (a==j+97) {
count[j]++;
break;
}
}
}
int max = 0;
int error = 0;
int show = 0;
for (int i=0; i<26; i++) {
if (count[i]>max) {
max = count[i];
}
}
for (int i=0; i<26; i++) {
if (count[i]==max) {
show=i;
error++;
}
}
if (error>1) {
System.out.println("?");
} else {
char a = (char)(show+'A');
System.out.println(a);
}
}
}
A.
- 문자열을 받아 str에 대입한다.
- 문자 배열과 int 배열을 만든다. 문자 배열에는 문자열을 각각 분해하여 대입하고, int 배열에는 알파벳에 해당하는 26의 길이를 가지는 배열을 만들고 기본 값으로 초기화한다.
- 문자 배열의 각 값을 int로 변환하여 아스키 코드의 값과 비교하는 반복문을 만들고 일치한다면 아스키 코드의 해당하는 알파벳의 int배열 위치에 +1을 해준다.
- 최대값, 에러, 표시를 위한 int를 선언하고 0으로 초기화한다.
- int 배열의 각 값을 비교하여 최대값을 max에 담아주는 반복문을 작성한다.
- 최대값과 각 int 배열의 값을 비교하여 같다면 error의 값을 +1 하고 해당하는 알파벳의 번호를 show에 받는 반복문을 작성한다.
- error가 1보다 큰 경우는 최대값을 가지는게 2가지 이상이기 때문에 ?를 출력한다.
- 그 이외는 show에 받은 숫자와 문자 ‘A’를 받아 (char)로 연산하고 출력하도록 한다.
6단계 크로아티아 알파벳
- 첫째 줄에 최대 100글자의 단어가 주어진다. 알파벳 소문자와 '-', '='로만 이루어져 있다.
- 단어는 크로아티아 알파벳으로 이루어져 있다. 문제 설명의 표에 나와있는 알파벳은 변경된 형태로 입력된다.
- 입력으로 주어진 단어가 몇 개의 크로아티아 알파벳으로 이루어져 있는지 출력한다.
import java.util.Scanner;
public class Step_6 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
String str = scan.next();
String[] alp = { "c=", "c-", "dz=", "d-", "lj", "nj", "s=", "z=" };
for (int i=0; i<alp.length; i++) {
str = str.replace(alp[i], "a");
}
System.out.println(str.length());
}
}
A.
- 받은 문자열을 str에 저장한다.
- 크로아티아 알파벳을 문자열 배열 alp에 대입한다.
- 대입할 때 순서에 주의한다. dz=가 z=보다 앞서야 함
- 반복문을 alp만큼 돌리고, 각 알파벳을 문자열”a”로 바꿔주는 .replace()를 만든다.
- 문자열을 교체해 준 str의 길이를 출력한다.
7단계 그룹 단어 체커
- 그룹 단어란 단어에 존재하는 모든 문자에 대해서, 각 문자가 연속해서 나타나는 경우 만을 말한다.
- 첫째 줄에 단어의 개수 N이 들어온다. N은 100보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에 단어가 들어온다. 단어는 알파벳 소문자로만 되어있고 중복되지 않으며, 길이는 최대 100이다.
- 첫째 줄에 그룹 단어의 개수를 출력한다.
import java.util.Scanner;
public class Step_7 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int length = scan.nextInt();
String[] strArr = new String[length];
int count =0;
for (int i=0; i<length; i++) {
strArr[i]= scan.next();
}
for (int i=0; i<length; i++) {
if (groupWord(strArr[i])) {
count++;
}
}
System.out.println(count);
}
public static boolean groupWord(String str) {
char[] charArr = new char[str.length()];
for (int i=0; i<str.length(); i++) {
charArr[i]=str.charAt(i);
}
for (int i=0; i<str.length()-1; i++) {
if (charArr[i]==charArr[i+1]) {
charArr[i]='0';
}
}
String str2 = "";
for (int i=0; i<str.length(); i++) {
if (charArr[i]!='0') {
str2+=charArr[i];
}
}
char[]charArr2 = new char[str2.length()];
for (int i=0; i<str2.length();i++) {
charArr2[i]=str2.charAt(i);
}
for (int i=0; i<str2.length(); i++) {
for (int j=i; j<str2.length(); j++) {
if (charArr2[i]==charArr2[j]&&i!=j) {
return false;
}
}
}
return true;
}
}
A.
- 단어를 strArr에 모두 받아주는 반복문을 만든다.
- String을 받아서 boolean을 리턴하는 메소드를 만든다. 그룹 단어를 체크할 것
- 문자열을 char배열에 분배하여 대입한다.
- 이어진 배열을 비교하여 앞과 뒤의 값이 같다면 앞의 값을 ‘0’으로 만드는 반복문을 만든다.
- 문자열 변수를 만들고, ‘0’이 아닌 char배열의 값을 이어서 새로운 문자열을 만든다.
- 새로운 문자열str2를 char배열 charArr2에 분배하여 대입한다.
- charArr2의 값 중 중복되는 값이 있다면 false를 그렇지 않다면 true를 리턴하도록 한다.
- 입력된 단어를 받아준 strArr의 각 값을 메소드를 이용하여 검사하고, true일 경우 +1을 해 주는 변수를 만들어 누적 합을 구해준다.
- 누적 합을 출력한다.
8단계 너의 평점은
- 전공평점은 전공과목별 (학점 × 과목평점)의 합을 학점의 총합으로 나눈 값이다.
- p등급 과목은 계산에서 제외한다.
- 20줄에 걸쳐 치훈이가 수강한 전공과목의 과목명, 학점, 등급이 공백으로 구분되어 주어진다.
- 치훈이의 전공평점을 출력한다.
import java.util.Scanner;
public class Step_8 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
String[] strArr = new String[20];
for (int i = 0; i < 20; i++) {
strArr[i] = scan.nextLine();
}
String[] strGrade = new String[20];
String[] strScore = new String[20];
for (int i = 0; i < 20; i++) {
String temp;
temp = strArr[i].substring(strArr[i].length() - 2);
temp = temp.replace(" ", "");
strGrade[i] = temp;
}
for (int i = 0; i < 20; i++) {
String temp;
temp = strArr[i].substring(strArr[i].length() - 6, strArr[i].length() - 2);
temp = temp.replace(" ", "");
strScore[i] = temp;
}
String[] grade = { "A+", "A0", "B+", "B0", "C+", "C0", "D+", "D0", "F", "P" };
String[] score = { "4.5", "4.0", "3.5", "3.0", "2.5", "2.0", "1.5", "1.0", "0", null };
double sumGrade = 0.0000;
double sumScore = 0.0000;
for (int i = 0; i < 20; i++) {
double dd = Double.parseDouble(strScore[i]);
int pass = 0;
for (int j = 0; j < 10; j++) {
try {
if (strGrade[i].equals(grade[j])) {
double d = Double.parseDouble(score[j]);
sumGrade += (d * dd);
}
} catch (Exception e) {
pass++;
}
}
if (pass == 0) {
sumScore += dd;
}
}
System.out.println(sumGrade / sumScore);
}
}
- 입력 받은 값을 문자열 배열에 저장한다.
- 각 문자열 배열의 뒤의 2개 문자를 추출해 평점으로 저장한다. 추출한 값에서 빈 칸을 제거해준다.
- 각 문자열 배열의 뒤에서 6번째~2번째 문자를 추출해 학점으로 저장한다. 추출한 값에서 빈 칸을 제거해준다.
- 평점에 맞는 점수를 배열로 초기화한다.
- 학점의 합과 평점의 합을 받을 double 변수를 선언한다.
- 반복문을 통해 p가 아닌 학점들의 합과 평점x학점의 합을 각각 학점과 평점의 변수에 누적한다.
- 평점x학점의 합을 학점으로 나누어 평균 평점을 구한다.
'백준' 카테고리의 다른 글
백준 닷컴 단계 별로 풀어보기 8단계 (1) | 2023.10.05 |
---|---|
백준 닷컴 단계 별로 풀어보기 7단계 (1) | 2023.10.05 |
백준 닷컴 단계 별로 풀어보기 5단계 (1) | 2023.09.21 |
백준 닷컴 단계 별로 풀어보기 4단계 (1) | 2023.09.19 |
백준 닷컴 단계 별로 풀어보기 3단계 (0) | 2023.09.19 |