반응형

1. 문제 번호 25206번


 

 

 

2. 문제 풀이

 

 

 

한줄 평가

 - 

 

 

 

문제를 먼저 정확히 파악

 

 - (학점 * 등급별 점수) / 학점

예시 ) 자바 프로그래밍 3.0 학점 A+, 파이썬 3.0 C0  

         ( (3.0*4.5)+(3.0*2.0) ) / 6 

         = 평균 3.25 

 

 

 

나의 문제풀이 방식 및 순서

 

 * 나의 다양한 학습이 우선이기 때문에 다양한 방법을 생각 *

 

 

 

  1. Map 에 등급별 점수를 리스트
  2. 한 줄 입력시 누적하며 값들을 저장
  3. 총 계산 후 출력

 

 

 

난 이런게 더 쉽다..ㅠㅠㅜㅜ

어제 연인과 이런 대화를 했다. 모든건 상대적이고, 각자의 장단점이 다 다르다.

나에게는 지독하게 어려운게 누군가에는 당연하고 쉬울수도.. 😊

 

 

 


3. 소스 인증

 

import java.util.*;
import java.lang.*;
import java.io.*;

// The main method must be in a class named "Main".
class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        Map<String, Double> gradeScoreMap = new HashMap<>();

        String[] grade = {"A+", "A0", "B+", "B0", "C+", "C0", "D+", "D0", "F"};
        Double[] gradeScore = {4.5, 4.0, 3.5, 3.0, 2.5, 2.0, 1.5, 1.0, 0.0};

        for (int i = 0; i < grade.length; i++) {
            gradeScoreMap.put(grade[i], gradeScore[i]);
        }

        String inputLine;

        double totalCredits = 0.0;
        double totalWeightedScores = 0.0;

        while ((inputLine = br.readLine()) != null) {
            String[] inputAry = inputLine.split(" ");
            double credits = Double.parseDouble(inputAry[1]);
            String gradeReceived = inputAry[2];

            if (!gradeReceived.equals("P")) {
                totalCredits += credits;
                if (gradeScoreMap.containsKey(gradeReceived)) {
                    totalWeightedScores += credits * gradeScoreMap.get(gradeReceived);
                }
            }
        }

        System.out.printf("%.6f%n", totalWeightedScores / totalCredits);
    }
}

 

 

 

- 실패 소스코드 -


더보기
import java.util.*;
import java.lang.*;
import java.io.*;

// The main method must be in a class named "Main".
class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st;
        Map<String,Double> gradeScoreMap = new HashMap<>();
        
        String [] grade = {"A+","A0","B+","B0","C+","C0","D+","D0","F"};
        Double [] gradeScore = {4.5,4.0,3.5,3.0,2.5,2.0,1.5,1.0,0.0};

        for(int i = 0; i < grade.length; i++){
            gradeScoreMap.put(grade[i],gradeScore[i]);
        }

        String inputLine = null;

        int subjectCnt = 0;
        Double subjectCredit = 0.00; //학점
        Double subjectScore  = 0.00; //학점*등급점수
        
        while((inputLine=br.readLine())!=null){
            String [] inputAry = inputLine.split(" ");
            for(int i = 0; i < inputAry.length ; i++){
                subjectCnt += 1;
                subjectCredit += Double.valueOf(inputAry[1]);
                
                if(gradeScoreMap.containsKey(inputAry[2])){
                    subjectScore += Double.valueOf(inputAry[1]) * gradeScoreMap.get(inputAry[2]);
                };
                
            }
        }

        System.out.println((subjectScore)/subjectCredit);
        

        
    }
}

 

 


4. 추가 개념

'double' vs 'Double'

기본 데이터 타입(primitive type) vs 객체 데이터 타입 (Wrapper Class)
기본 메모리 타입이 메모리,성능 측면에서 효율적
객체 데이터 타입은 'null' 값을 가질 수 있다.

'Double.parseDouble(String)' -> 기본 데이터 타입 Convert
'Double.valueOf(String)' -> 객체 데이터 타입 Convert  

 

'.equals' vs '=='

'==' 객체에서는 동일 주소를 비교
'.equals' 는 객체 타입에서 값을 비교

 

 

 

 

 


5. 참조 블로그


 

불편함을 느끼실 경우 연락 주시면 곧 바로 삭제하도록 하겠습니다.

 


 

 

 

 

 

 

 

 

728x90
반응형
반응형

1. 문제 번호 1316번


 

 

 

2. 문제 풀이 (한줄 평가)

 - 핵심은 n 과 n-1을 비교하여야 연속됌을 판단할 수 있음  

 

 

나의 문제풀이 방식 및 순서

 

 * 나의 다양한 학습이 우선이기 때문에 다양한 방법을 생각 *

 

문제를 먼저 정확히 파악 

new          -> 모두 단어가 1번 사용됌

vvba         -> 모두 단어가 1번 사용됌 (v 연속적인 단어는 인정)

aba           -> a가 연속적이지 않고 2번 사용됌 (X)

bbab         -> b가 연속적이였지만 끝에 사용되어 2번 사용됌(X)

abbbbba   -> (X)

 

  1. 첫 번째 방법 
    1. 각 영 단어 26개 배열에 True,False를 넣어둔다.
    2. 단어(abbbba)의 첫 번째 index는 해당 단어는 사용되었으니 True
    3. 단어(abbbba)의 두 번째 index와 첫 번째 index를 비교하여 값이 동일하면 pass / 다르면 해당 단어에 True
    4. 단어(abbbba)의 여섯 번째 index와 다섯 번째 index를 비교하여 값이 다르니 해당 단어에 True
      1. 근데 이미 a는 True가 있으니 이것은 그룹 단어가 아니다. !!! 
  2. 두 번째 방법
    1. 단어(abbbba)의 중복을 제거한 문자를 추출
    2. 중복 제거한 문자의 index를 전체 뽑는다.
    3. index값이 인접한 값인지 recursive하여 확인

 

 

여전히 어렵다...정답비율이 이렇게 높아...?

손으로 움직이기 전 규칙이나 반례, 설계부터 긴 시간을 들여서 고민하고 손 코딩하고 움직여야겠다..😊

 

 

 


3. 소스 인증

 

import java.util.*;
import java.lang.*;
import java.io.*;

// The main method must be in a class named "Main".
class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int inputCnt = Integer.parseInt(br.readLine());
        int groupWordCnt = 0;

        for(int i = 0; i < inputCnt; i++){
            String inputLine = br.readLine();
            boolean [] alphabet = new boolean[26];
//            Arrays.fill(alphabet,false);
            boolean isGroupWord = true;
            
            for(int j = 0; j < inputLine.length(); j++){
                char currentChar = inputLine.charAt(j);
                
                if (j > 0 && alphabet[currentChar-'a'] && currentChar != inputLine.charAt(j-1)){
                    isGroupWord = false;
                    break;    
                }
                alphabet[currentChar-'a'] = true;
            }
            if(isGroupWord){
                groupWordCnt++;    
            }
        }
        System.out.println(groupWordCnt);

    }
}

 

 

 

import java.util.*;
import java.lang.*;
import java.io.*;

// The main method must be in a class named "Main".
class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int inputCnt = Integer.parseInt(br.readLine());
        int groupWordCnt = 0;

        for (int i = 0; i < inputCnt; i++){
            String inputLine = br.readLine();
            String dis_inputLine = "";
            
            Map<Character,List<Integer>> indexesMap = new HashMap<>();

            /* 방법 1. 중복제거 */
            for(int j = 0; j < inputLine.length(); j++){
                if(inputLine.indexOf(inputLine.charAt(j)) == j ){
                    dis_inputLine += inputLine.charAt(j);
                }
            }
            /* 방법 2. 중복제거 */
            // Set<Character> set = new HashSet<>();
            // for (int j = 0; j < inputLine.length(); j++){
            //     char c = inputLine.charAt(j);

            //     if (!set.contains(c)){
            //         dis_inputLine += c;
            //     }
            // }

            /* 방법 1. 포함여부 확인 */
            inputLine.contains(dis_inputLine);
            /* 방법 1. 일치여부 확인 */
            inputLine.equals(dis_inputLine);
            
            /*방법 3. 중복 제거 후 HashMap Insert */
            // for(int j = 0; j < inputLine.length(); j++){
            //     if(inputLine.indexOf(inputLine.charAt(j)) == j ){
            //         indexesMap.put(inputLine.charAt(j),new ArrayList<>());
            //     }
            // }
            
            /* 중복을 제거한 key를 삽입 */
            for (int j = 0; j < dis_inputLine.length(); j++){
                indexesMap.put(dis_inputLine.charAt(j), new ArrayList<>());
            }
            /* 
            a : 1,2,3 b : 4,5,6 
            중복을 제거한 Key와 기존의 데이터를 비교하여 
            포함되는 index 삽입 
            */
            for (int j = 0; j < inputLine.length(); j++){
                char currentChar = inputLine.charAt(j);
                if(indexesMap.containsKey(currentChar)){
                    indexesMap.get(currentChar).add(j);
                }
            }
            
            
            // Set<String> keySet = indexesMap.keySet();
            // char[] keyAry = keySet.toCharArray(new Character[0]);
            
            //또는 for(char c : keyAry) 가능
            for(char c : dis_inputLine.toCharArray()){ 
                List<Integer> indexes = indexesMap.get(c);
                if(isConsecutive(indexes)){
                    groupWordCnt +=1;
                } else {
                    groupWordCnt = 0;
                }
            }
            System.out.println(groupWordCnt);

        }

    }
    public static boolean isConsecutive(List<Integer> indexes){
        for (int i = 1; i < indexes.size(); i++){
            if(indexes.get(i) != indexes.get(i-1) +1 ){
                return false;
            }
        }
        return true;
    }
}

 

 

- 실패 소스코드 -




4. 추가 개념

 

 

 

 

 

 


5. 참조 블로그


 

불편함을 느끼실 경우 연락 주시면 곧 바로 삭제하도록 하겠습니다.

 


 

 

 

 

 

 

 

728x90
반응형
반응형

1. 문제 번호 2941번


 

 

 

2. 문제 풀이 

 

 

 

나의 문제풀이 방식 및 순서

 

 * 나의 다양한 학습이 우선이기 때문에 다양한 방법을 생각 *

 

 1. 어렵다...

     replace할까? 까지 생각했는데 어떻게 리스트화해서 replace하지? 라고 생각하다가 포기

 

 

 


3. 소스 인증

 

import java.util.*;
import java.lang.*;
import java.io.*;

// The main method must be in a class named "Main".
class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String input = br.readLine();
        
        String[] croatianAlphabets = { "c=", "c-", "dz=", "d-", "lj", "nj", "s=", "z=" };

        for (String alphabet : croatianAlphabets){
            input = input.replace(alphabet," ");
        }

        /***************************************************************
        
         * Content         : '.' vs '()' 
                             
                             '.' 연산자는 객체의 필드나 메서드에 접근할 때 사용
                             즉 특정 객체의 멤버에 접근하거나 메서드를 호출할 때 사용
                             
                             input.length() : input 객체의 length() 메서드에 접근하여 호출
                             System.out.print() : System클래스의 out 필드에 접근, println 메서드를 호출

                             '()' 괄호는 메서드를 호출할 때 사용
                             
        
        ****************************************************************/
        System.out.println(input.length());
    }
}

 

 

 

 

- 실패 소스코드 -




4. 추가 개념

 

 

' . ' vs ' ( ) '


' . '  연산자
객체의 필드나 메서드에 접근할 때 사용
(※즉 특정 객체의 멤버에 접근하거나 메서드를 호출할 때 사용)


' ( ) ' 연산자
메서드를 호출할 때 사용

String.length()   : String 객체의 length() 메서드에 접근하여 호출
System.out.print() : System클래스의 out필드 접근, print 메서드 호출

 

 

Q.  inputLine.length() 에서 inputLine에 메소드 length()를 안만들었는데 어떻게 되지..?

A.  String Class에서 Java 표준 라이브러리에 포함되어 있기 때문에 사용 가능하다. (음..당연한 이야기 이지만 의문을 가져야 보이지 )


5. 참조 블로그


 

불편함을 느끼실 경우 연락 주시면 곧 바로 삭제하도록 하겠습니다.

 


 

 

 

 

 

 

 

728x90
반응형
반응형

1. 문제 번호 1157번


 

 

 

2. 문제 풀이 

 

 

 

 

나의 문제풀이 방식 및 순서

 

 * 나의 다양한 학습이 우선이기 때문에 다양한 방법을 생각 *

 

  1. HashMap
    1. 대문자로 치환
    2. 각 문자별로 개수를 확인하여 HashMap에 저장
    3. 최대값 추출하여 표현
      1. 최대값 추출은 반복문을 통한 방법
      2. Java Stream API를 사용

 

 

 

 


3. 소스 인증

 

import java.util.*;
import java.lang.*;
import java.io.*;

// The main method must be in a class named "Main".
class Main {
    public static void main(String[] args) throws IOException{
        BufferedReader br = new BufferedReader(new  InputStreamReader(System.in ));

        String inputLine = br.readLine().toUpperCase();
        int inputSize = inputLine.length();
        Map<Character, Integer> alphabetCnt = new HashMap<>(); //Map 인터페이스는 키와 값 모두 객체

        for(int i = 0; i < inputSize; i++){
            char currentChar = inputLine.charAt(i);
            if(alphabetCnt.containsKey(currentChar)){
                alphabetCnt.put(currentChar, alphabetCnt.get(currentChar) + 1);
            } else {
                alphabetCnt.put(currentChar, 1);
            }

            //indexOf 처음나오는 index찾기
            // if (inputLine.indexOf(inputLine.charAt(i)) != i) {
            // }
        }

        char maxChar = ' ';
        int  maxValue = 0; 
        boolean hasMultipleMax = false;

        for(Map.Entry<Character, Integer> entry : alphabetCnt.entrySet()){
            int count = entry.getValue();
            if(maxValue < count){
                maxValue = count;
                maxChar  = entry.getKey();
                hasMultipleMax = false;
            } else if (maxValue == count){
                hasMultipleMax = true;
            }
            
        }
        
        System.out.print( hasMultipleMax==true ? "?" : maxChar );
    }
}

 

 

import java.util.*;
import java.lang.*;
import java.io.*;

// The main method must be in a class named "Main".
class Main {
    public static void main(String[] args) throws IOException{
        BufferedReader br = new BufferedReader(new  InputStreamReader(System.in ));

        String inputLine = br.readLine().toUpperCase();
        int inputSize = inputLine.length();
        Map<Character, Integer> alphabetCnt = new HashMap<>(); //Map 인터페이스는 키와 값 모두 객체

        for(int i = 0; i < inputSize; i++){
            char currentChar = inputLine.charAt(i);
            if(alphabetCnt.containsKey(currentChar)){
                alphabetCnt.put(currentChar, alphabetCnt.get(currentChar) + 1);
            } else {
                alphabetCnt.put(currentChar, 1);
            }
        }

        Optional<Map.Entry<Character, Integer>> maxEntry = alphabetCnt.entrySet().stream()
                .max(Map.Entry.comparingByValue());

        if(maxEntry.isPresent()){
            Map.Entry<Character, Integer> entry = maxEntry.get();
            long count = alphabetCnt.entrySet().stream()
                    .filter(e -> e.getValue().equals(entry.getValue()))
                    .count();

            if(count > 1){
                System.out.println("?");
            } else {
                System.out.println(entry.getKey());
            }
        }
        
        System.out.print( hasMultipleMax==true ? "?" : maxChar );
    }
}

 

 

- 실패 소스코드 -




4. 추가 개념

 

HashMap

 

 


5. 참조 블로그


 

불편함을 느끼실 경우 연락 주시면 곧 바로 삭제하도록 하겠습니다.

 


 

 

 

 

 

 

 

728x90
반응형

'알고리즘(BOJ) 문제풀이' 카테고리의 다른 글

[BOJ/백준] 심화_1316번  (0) 2024.05.18
[BOJ/백준] 심화_2941번  (0) 2024.05.18
[BOJ/백준] 심화_10988번  (0) 2024.05.17
[BOJ/백준] 심화_2444번  (0) 2024.05.17
[BOJ/백준] 1차원 심화_ 3003번  (0) 2024.05.16
반응형

1. 문제 번호 10988번


 

 

 

2. 문제 풀이 

 

/***************************************************************

 * Test   Data     : CABAA 
 * Expect Result   : False
 * Test   Result   : True
 * 
 * Cause           : 동일 변수에 데이터 초기화
 * Caution         : break를 신경쓰자

****************************************************************/
for(int i = 0; i < inputSize/2; i++){
    isTrue = (inputLine.charAt(i) == inputLine.charAt(inputSize-i-1) ? 1 : 0);
}


for(int i = 0; i < inputSize/2; i++){
    if( inputLine.charAt(i) != inputLine.charAt(inputSize-i-1)){
        isTrue = 0;
        break;
    }
}

 

 

 

나의 문제풀이 방식 및 순서

 

 * 나의 다양한 학습이 우선이기 때문에 다양한 방법을 생각 *

 

 1. 초기화 주의 필요

 

 

 


3. 소스 인증

 

import java.util.*;
import java.lang.*;
import java.io.*;

// The main method must be in a class named "Main".
class Main {
    public static void main(String[] args) throws IOException{
        BufferedReader br = new BufferedReader(new  InputStreamReader(System.in ));
        StringBuilder sb = new StringBuilder();

        int n = Integer.parseInt(br.readLine());

        for(int i = 1; i <= n; i++){
            for(int j = 1; j <= n-i; j++){
                sb.append(" ");
            }
            for(int j = 1; j <= 2*i-1; j++){
                sb.append("*");
            }
            sb.append("\n");
        }

        for(int i = n-1; i >= 1; i-- ){
            for(int j = 1; j <= n-i ; j++){
                sb.append(" ");
            }
            for(int j = 1; j <= 2*i-1; j++){
                sb.append("*");
            }
            sb.append("\n");
        }
        

        System.out.print(sb);
    }
}

 

 

 

 

- 실패 소스코드 -




4. 추가 개념

 

 

 

 

 


5. 참조 블로그


 

불편함을 느끼실 경우 연락 주시면 곧 바로 삭제하도록 하겠습니다.

 


 

 

 

 

 

 

 

728x90
반응형
반응형

1. 문제 번호 2444번


 

 

 

2. 문제 풀이 

 - 절반 자르고 윗부분 아랫부분 나눠서 풀이

 

 

 

 

나의 문제풀이 방식 및 순서

 

 * 나의 다양한 학습이 우선이기 때문에 다양한 방법을 생각 *

 

 1. 나에게는 여태 어떤 문제보다 어려웠다..

    여전히 어렵고 답을 봐서 외워버렸지만 이렇게 사고하는게 쉽지 않다...

 


3. 소스 인증

 

import java.util.*;
import java.lang.*;
import java.io.*;

// The main method must be in a class named "Main".
class Main {
    public static void main(String[] args) throws IOException{
        BufferedReader br = new BufferedReader(new  InputStreamReader(System.in ));
        StringBuilder sb = new StringBuilder();

        int n = Integer.parseInt(br.readLine());

        for(int i = 1; i <= n; i++){
            for(int j = 1; j <= n-i; j++){
                sb.append(" ");
            }
            for(int j = 1; j <= 2*i-1; j++){
                sb.append("*");
            }
            sb.append("\n");
        }

        for(int i = n-1; i >= 1; i-- ){
            for(int j = 1; j <= n-i ; j++){
                sb.append(" ");
            }
            for(int j = 1; j <= 2*i-1; j++){
                sb.append("*");
            }
            sb.append("\n");
        }
        

        System.out.print(sb);
    }
}

 

 

 

 

- 실패 소스코드 -




4. 추가 개념

 

 

 

 

 


5. 참조 블로그


 

불편함을 느끼실 경우 연락 주시면 곧 바로 삭제하도록 하겠습니다.

 


 

 

 

 

 

 

 

728x90
반응형
반응형

1. 문제 번호 3003번


 

 

 

2. 문제 풀이 

 - StringBuilde.append( ) 

 

 

 

 

나의 문제풀이 방식 및 순서

 

 * 나의 다양한 학습이 우선이기 때문에 다양한 방법을 생각 *

 

 1. StringBuilde.append( ) 를 복습

 

 


3. 소스 인증

 

import java.util.*;
import java.lang.*;
import java.io.*;

// The main method must be in a class named "Main".
class Main {
    public static void main(String[] args) throws IOException{
        BufferedReader br = new BufferedReader(new  InputStreamReader(System.in ));

        String [] inputLine = br.readLine().split(" ");
        StringBuilder st = new StringBuilder();
        
        int [] itemCnt = {1,1,2,2,2,8};

        for(int i = 0; i < inputLine.length; i++ ){
            int temp = itemCnt[i] - Integer.parseInt(inputLine[i]);
            st.append(temp).append(" ");
        }
        System.out.print(st);
    }
}

 

 

 

 

- 실패 소스코드 -




4. 추가 개념

 

 

 

 

 


5. 참조 블로그


 

불편함을 느끼실 경우 연락 주시면 곧 바로 삭제하도록 하겠습니다.

 


 

 

 

 

 

 

 

728x90
반응형

'알고리즘(BOJ) 문제풀이' 카테고리의 다른 글

[BOJ/백준] 심화_10988번  (0) 2024.05.17
[BOJ/백준] 심화_2444번  (0) 2024.05.17
[BOJ/백준] 문자열_11718번  (0) 2024.05.16
[BOJ/백준] 문자열_5622번  (0) 2024.05.16
[BOJ/백준] 문자열_2908번  (0) 2024.05.16
반응형

1. 문제 번호 11718번


 

 

 

2. 문제 풀이 

 - while( br.ready() )

 

 

 

 

나의 문제풀이 방식 및 순서

 

 * 나의 다양한 학습이 우선이기 때문에 다양한 방법을 생각 *

 

 1. 문제는 겁나 쉬운데 정답률이 33%라서 틀리기 싫어서 여러번 자세히 꼼꼼히 읽음

 

 


3. 소스 인증

 

import java.util.*;
import java.lang.*;
import java.io.*;

// The main method must be in a class named "Main".
class Main {
    public static void main(String[] args) throws IOException{
        BufferedReader br = new BufferedReader(new  InputStreamReader(System.in ));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        while( br.ready() ){
            bw.write(br.readLine());
            bw.write("\n");
        }
        
        bw.flush();
        bw.close();
        br.close();
        

    }
}

 

 

 

 

- 실패 소스코드 -




4. 추가 개념

 

 

 

 

 


5. 참조 블로그


 

불편함을 느끼실 경우 연락 주시면 곧 바로 삭제하도록 하겠습니다.

 


 

 

 

 

 

 

 

728x90
반응형

'알고리즘(BOJ) 문제풀이' 카테고리의 다른 글

[BOJ/백준] 심화_2444번  (0) 2024.05.17
[BOJ/백준] 1차원 심화_ 3003번  (0) 2024.05.16
[BOJ/백준] 문자열_5622번  (0) 2024.05.16
[BOJ/백준] 문자열_2908번  (0) 2024.05.16
[BOJ/백준] 문자열_1152번  (0) 2024.05.16

+ Recent posts