실무에서 개발자로 일한지 어엿 2년, 반복된 개발만 하다보니 자바에 대한 기초적인 지식을 까먹기 시작했다...
이렇게 살다간 물경력만 될 것 같아 백준을 풀어보며 기초를 다지기로 했다...!
회사에서 시간나는 틈틈히 할 거라.. 날마다 양도 다르고 안 올리는 날도 올텐데,
그럼에도 우선 꾸준히 해보려고 한다.
피드백 대환영이에요~..
문제
N개의 숫자가 공백 없이 쓰여있다. 이 숫자를 모두 합해서 출력하는 프로그램을 작성하시오.입력
첫째 줄에 숫자의 개수 N (1 ≤ N ≤ 100)이 주어진다. 둘째 줄에 숫자 N개가 공백없이 주어진다.출력
입력으로 주어진 숫자 N개의 합을 출력한다.
예제 입력
5
54321예제 출력
15
class Main {
public static void main (String[] args) throws java.lang.Exception {
Scanner in = new Scanner(System.in);
int cnt = in.nextInt(); //숫자 갯수를 먼저 받고
String numbers = in.next(); //더할 숫자들 전체를 String으로 받기
int sum=0; //합계 초기화
for(int i=0; i<cnt; i++){ //숫자 갯수만큼 반복
//charAt(i) : String타입의 변수에서 특정 문자를 char 타입으로 변환할 수 있는 함수
//i자리에 int형 변수를 넣어서 원하는 위치의 문자를 가져올 수 있음.
sum += numbers.charAt(i) - '0';
// i자리에 값을 가져와서 0을 빼줘야 됨.
//0을 빼주는 이유는 char은 유니코드(아스키코드)로 저장이 되는데, 실제 정수값을 가져오기 위해서는 0을 빼야 됨.
}
System.out.print(sum);
}
}
문제
김형택은 지금 몰래 Spider Solitaire(스파이더 카드놀이)를 하고 있다. 형택이는 이 게임을 이길 때도 있었지만, 질 때도 있었다. 누군가의 시선이 느껴진 형택이는 게임을 중단하고 코딩을 하기 시작했다. 의심을 피했다고 생각한 형택이는 다시 게임을 켰다. 그 때 형택이는 잠시 코딩을 하는 사이에 자신의 게임 실력이 눈에 띄게 향상된 것을 알았다.
이제 형택이는 앞으로의 모든 게임에서 지지 않는다. 하지만, 형택이는 게임 기록을 삭제 할 수 없기 때문에, 자신의 못하던 예전 기록이 현재 자신의 엄청난 실력을 증명하지 못한다고 생각했다.
게임 기록은 다음과 같이 생겼다.
게임 횟수 : X
이긴 게임 : Y (Z%)
Z는 형택이의 승률이고, 소수점은 버린다. 예를 들어, X=53, Y=47이라면, Z=88이다.
X와 Y가 주어졌을 때, 형택이가 게임을 최소 몇 번 더 해야 Z가 변하는지 구하는 프로그램을 작성하시오.입력
각 줄에 정수 X와 Y가 주어진다.출력
첫째 줄에 형택이가 게임을 최소 몇 판 더 해야하는지 출력한다. 만약 Z가 절대 변하지 않는다면 -1을 출력한다.
예제 입력 1
100 80예제 출력 1
6예제 입력 2
47 47예제 출력 2
-1
class Main {
public static void main (String[] args) throws java.lang.Exception {
Scanner in = new Scanner(System.in);
float X = in.nextInt(); //게임횟수
float Y = in.nextInt(); //이긴횟수
float Z = (Y/X)*100; //승률
int result = (int) Z; //소수점 제외한 승률
int S=0; //승률이 변하기 위한 최소의 게임 횟수
if (Z >= 99) { //승률이 이미 99 이상이면 -1 출력력
System.out.println(-1);
return;
}
for(int i =1; i<=X; i++){
float Z_i; //새로운 승률
Z_i = ((Y+i)*100) / (X+i); // 게임을 +1 씩 추가하여
int result_i = (int) Z_i;
if(result != result_i) { // 승률이 변하면 stop
S=i;
break;
}
}
System.out.print(S);
}
}
문제
어떤 사람이 무엇을 즐기느냐에 따라 그 사람의 인생 점수를 측정할 수 있다. A를 1점, B를 2점, ... , Z를 26점으로 해, 즐기는 것의 이름의 알파벳 점수를 모두 더하면 된다. 예를 들어, "OTAKU LIFE" 는 O = 15, T = 20, A = 1, K = 11, U = 21, L = 12, I = 9, F = 6, E = 5 로 모두 더하면 100점이 된다(띄어쓰기는 무시). 하지만 "GAMING LIFE"는 총 83점으로 부족한 삶이고, "PROGRAMMING"은 131점으로 너무 힘든 삶을 살고 있다. 여러분이 할 것은 여러 개의 즐기는 것 리스트를 입력받아, 그것이 각 몇 점짜리 인생인지를 계산하는 것이다.입력
첫 번째 줄에 즐기는 것의 개수 N이 주어진다. 뒤의 N개 줄에는 즐기는 것의 이름이 모두 영어 대문자와 띄어쓰기로 적혀 있다. 이는 30자를 넘지 않는다.출력
각 줄에 인생 점수를 입력받은 대로 출력한다. 만약 100점이라면 100 대신 "PERFECT LIFE" 를 출력한다.
예제 입력
4
OTAKU LIFE
PRODUCER
GAMING LIFE
PROGRAMMING예제 출력
PERFECT LIFE
PERFECT LIFE
83
131
import java.util.*;
import java.lang.*;
import java.io.*;
class Main {
public static void main (String[] args) throws java.lang.Exception {
Scanner in = new Scanner(System.in);
int number = in.nextInt(); //입력받은 숫자
for(int i=0; i<=number; i++){ //숫자만큼 개행한 문자를 String_i로 넣음
String String_i = in.nextLine().replaceAll("\\s+",""); //공백 제거 후
int text_i=0;
String result_i=""; //결과값
for(int k=0; k < String_i.length(); k++){
text_i += ((int)String_i.charAt(k)-64); //알파벳을 숫자로 변환하는 코드
if(text_i == 100){
result_i = "PERFECT LIFE";
}else{
result_i = String.valueOf(text_i);
}
}
if(i!=0){
System.out.println(result_i);
}
}
}
}
문제
입력 받은 대로 출력하는 프로그램을 작성하시오.입력
입력이 주어진다. 입력은 최대 100줄로 이루어져 있고, 알파벳 소문자, 대문자, 공백, 숫자로만 이루어져 있다. 각 줄은 100글자를 넘지 않으며, 빈 줄은 주어지지 않는다. 또, 각 줄은 공백으로 시작하지 않고, 공백으로 끝나지 않는다.출력
입력받은 그대로 출력한다.
예제 입력
Hello
Baekjoon
Online Judge예제 출력
Hello
Baekjoon
Online Judge
class Main {
public static void main (String[] args) throws java.lang.Exception {
Scanner in = new Scanner(System.in);
//hasNextLine() : 몇 번 입력하는지 정해져 있지 않고, 입력이 없을 때까지 반복해야할 때 사용하는 메서드
//hasNextLine()을 사용하면 읽을 값이 있으면 true, 없으면 false
for (int i = 0; i < 100 && in.hasNextLine(); i++) { // 100번 이하로 반복하고, 더 이상 입력이 없을 때 종료
String text_i = in.nextLine();
System.out.println(text_i);
}
in.close();
}
}
문제
INU 코드페스티벌은 불꽃놀이로 행사를 마무리합니다. 광재는 올해 불꽃놀이 담당자입니다.
누군가 폭죽을 모두 사버리는 바람에 남아있는
개의 폭죽으로 불꽃놀이를 진행하게 되었습니다.모든 폭죽에는 화려한 정도를 나타내는 정수
가 적혀있습니다. 다음 규칙을 만족하도록 불꽃놀이를 구성해야 합니다. 모든 폭죽을 사용할 필요는 없습니다.첫 번째 불꽃놀이의 화려한 정도는
이상이어야 합니다.
불꽃놀이의 화려한 정도는 이전 불꽃놀이의 화려한 정도보다 작지 않아야 합니다.
안전상의 이유로 한 번에
개 또는
개의 폭죽만 터트릴 수 있습니다.
개의 폭죽을 동시에 터트리는 경우 화려한 정도는 두 폭죽의 합과 같습니다.
예를 들어, 남은 폭죽의 화려한 정도가 각각
이고 첫 번째 불꽃놀이의 화려한 정도가
이상이어야 한다면, 다음과 같이 규칙을 만족하도록 불꽃놀이를 진행할 수 있습니다.>
위와 같이 4번 진행할 수 있습니다. 이보다 더 많은 횟수의 불꽃놀이를 규칙을 만족하도록 진행할 수는 없습니다.
만약 남은 폭죽의 화려한 정도가 각각
이고, 첫 번째 불꽃놀이의 화려한 정도가
이상이어야 한다면 규칙을 만족하도록 불꽃놀이를 진행할 수 없습니다.학생들은 불꽃놀이를 많이 할수록 만족도가 높습니다. 광재를 도와 최대한 많은 횟수의 불꽃놀이를 만들어주세요.
불꽃놀이를 한 번 이상 진행할 수 있다면, 불꽃놀이를 최대 몇 번 진행할 수 있는지 출력해주세요. 만약 불꽃놀이를 진행할 수 없다면
을 출력해주세요.입력
첫 번째 줄에
과
이 주어집니다. (
,
는 정수입니다.)두 번째 줄에 가지고 있는 폭죽의 화려한 정도를 나타내는
개의 정수
가 공백으로 구분되어 주어집니다.
출력
불꽃놀이를 최대 몇 번 진행할 수 있는지 출력해주세요. 만약 불꽃놀이를 진행할 수 없다면
을 출력해주세요.
예제 입력 1
6 7
10 4 1 8 12 5예제 출력 1
4예제 입력 2
2 7
2 3예제 출력 2
-1
class Main {
public static void main (String[] args) throws java.lang.Exception {
Scanner in = new Scanner(System.in);
int N = in.nextInt();
int K = in.nextInt();
int[] fire = new int[N];
for(int i=0; i<fire.length; i++){
fire[i] = in.nextInt();
}
ArrayList<Integer> BigArr = new ArrayList<>(); // K 이상
ArrayList<Integer> SmallArr = new ArrayList<>(); // K 미만
for (int i = 0; i < fire.length; i++) {
if(fire[i] >= K){
BigArr.add(fire[i]);
}else{
SmallArr.add(fire[i]);
}
}
// 정렬
Collections.sort(BigArr);
Collections.sort(SmallArr);
ArrayList<Integer> result = new ArrayList<>();
// K 이상인 것은 바로 result에 넣고
result.addAll(BigArr);
// 작은 수들을 두 개씩 조합해서 K 이상이면 추가
int left = 0, right = SmallArr.size() - 1;
while(left < right){
int sum = SmallArr.get(left) + SmallArr.get(right);
if(sum >= K){
result.add(sum);
left++;
right--;
}else{
left++;
}
}
// 아무것도 못 만든 경우는 -1 출력
if(result.size() == 0){
System.out.println("-1");
return;
}
// 오름차순 정렬 (불꽃놀이 순서용)
Collections.sort(result);
// 불꽃놀이 진행: 이전 값보다 크거나 같은 것만 가능
int count = 1; // 최소 하나는 됨
int prev = result.get(0);
for(int i = 1; i < result.size(); i++){
if(result.get(i) >= prev){
count++;
prev = result.get(i);
}
}
System.out.println(count);
in.close();
}
}
이 문제는 풀다가 너무 어려워서 chatGPT에 도움을 좀 받았다.. ㅜ