반응형

1. 문제 번호 15552번


 

2. 문제 풀이 

 - BufferedWriter, BufferedWriter.write(), BufferedWriter.flush(), BufferedWriter.close()

 

나의 문제풀이 방식 및 순서


3. 소스 인증

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

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));   //할당된 버퍼에 값 넣어주기
        StringTokenizer st = new StringTokenizer(br.readLine());

        int size = Integer.parseInt(st.nextToken());
        
        String[] stringList = new String[size];
        
        for (int i = 0; i < size; i++) {
            stringList[i] = br.readLine();
        }

        for (String str : stringList) {
            StringTokenizer tokenizer = new StringTokenizer(str);
            int first = Integer.parseInt(tokenizer.nextToken());
            int second = Integer.parseInt(tokenizer.nextToken());
            
            bw.write(first+second+"\n");   //버퍼에 있는 값 전부 출력
        }
        bw.flush();   //남아있는 데이터를 모두 출력시킴
        bw.close();   //스트림을 닫음
    }
}

4. 추가 개념

728x90
반응형

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

[BOJ/백준] 반복문_11022번  (0) 2024.05.08
[BOJ/백준] 반복문_11021번  (0) 2024.05.08
[BOJ/백준] 반복문_25314  (0) 2024.05.08
[BOJ/백준] 반복문_25304번  (0) 2024.05.08
[BOJ/백준] 반복문_8393번  (0) 2024.05.08
반응형

1. 문제 번호 25314번


 

2. 문제 풀이 

 

나의 문제풀이 방식 및 순서


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));
        StringTokenizer st = new StringTokenizer(br.readLine());

        int inData = Integer.parseInt(st.nextToken());

        for (int i = 4; i <= inData; i+=4){
            System.out.print("long ");
        }
        System.out.print("int");
        
    } 
}

4. 추가 개념

728x90
반응형

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

[BOJ/백준] 반복문_11021번  (0) 2024.05.08
[BOJ/백준] 반복문_15552번  (0) 2024.05.08
[BOJ/백준] 반복문_25304번  (0) 2024.05.08
[BOJ/백준] 반복문_8393번  (0) 2024.05.08
[BOJ/백준] 반복문_10950  (0) 2024.05.08
반응형

1. 문제 번호 25304번


 

2. 문제 풀이 

2.1 Recursion의 가장 단순한 예제

 

나의 문제풀이 방식 및 순서


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 totalCost = Integer.parseInt(br.readLine());
        int itemCnt   = Integer.parseInt(br.readLine());

        String [] item = new String[itemCnt];
        int calCost = 0;

        for(int i = 0; i<itemCnt; i++){
            item[i] = br.readLine();
            StringTokenizer st = new StringTokenizer(item[i]);
            calCost += (Integer.parseInt(st.nextToken()) * Integer.parseInt(st.nextToken()));
        }

        System.out.print( totalCost == calCost ? "Yes" : "No" );
        
    } 
}

4. 추가 개념

728x90
반응형

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

[BOJ/백준] 반복문_15552번  (0) 2024.05.08
[BOJ/백준] 반복문_25314  (0) 2024.05.08
[BOJ/백준] 반복문_8393번  (0) 2024.05.08
[BOJ/백준] 반복문_10950  (0) 2024.05.08
[BOJ/백준] 반복문_2739번  (0) 2024.05.08
반응형

1. 문제 번호 8393번


 

2. 문제 풀이 

2.1 Recursion의 가장 단순한 예제

 

나의 문제풀이 방식 및 순서


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));
        StringTokenizer st = new StringTokenizer(br.readLine());

        int i = Integer.parseInt(st.nextToken());

        int result = recursionFunc(i);
        System.out.println(result);
    }

    public static int recursionFunc(int i){
        if(i==1){
            return 1;
        } else {
            return i + recursionFunc(i-1);
        }
        
    } 
}

4. 추가 개념

728x90
반응형

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

[BOJ/백준] 반복문_25314  (0) 2024.05.08
[BOJ/백준] 반복문_25304번  (0) 2024.05.08
[BOJ/백준] 반복문_10950  (0) 2024.05.08
[BOJ/백준] 반복문_2739번  (0) 2024.05.08
[BOJ/백준] 조건문_2480번  (0) 2024.05.07
반응형

1. 문제 번호 10950번


 

2. 문제 풀이 

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));
        StringTokenizer st = new StringTokenizer(br.readLine());

        int i = Integer.parseInt(st.nextToken());
        
        boolean isStrat = false;
        int repeatCnt = 0;

        String [] stringList = new String[i];
        

        while(!isStrat){
            if (i == repeatCnt) {
                isStrat = true;
            } else {
                stringList[repeatCnt] = br.readLine();
                repeatCnt +=1;
            }
        }

        for(String chk : stringList){
            StringTokenizer tokenizer = new StringTokenizer(chk);
            int first = Integer.parseInt(tokenizer.nextToken());
            int second = Integer.parseInt(tokenizer.nextToken());
            System.out.println(first + second);
            
        }
        }
}

 

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

class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());

        int size = Integer.parseInt(st.nextToken());
        
        String[] stringList = new String[size];
        
        for (int i = 0; i < size; i++) {
            stringList[i] = br.readLine();
        }

        for (String str : stringList) {
            StringTokenizer tokenizer = new StringTokenizer(str);
            int first = Integer.parseInt(tokenizer.nextToken());
            int second = Integer.parseInt(tokenizer.nextToken());
            System.out.println(first + second);
        }
    }
}

4. 추가 개념

 

728x90
반응형

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

[BOJ/백준] 반복문_25304번  (0) 2024.05.08
[BOJ/백준] 반복문_8393번  (0) 2024.05.08
[BOJ/백준] 반복문_2739번  (0) 2024.05.08
[BOJ/백준] 조건문_2480번  (0) 2024.05.07
[BOJ/백준] 조건문_2884  (0) 2024.05.07
반응형

1. 문제 번호 2739번


 

2. 문제 풀이 

2.1 일반적인 문제풀이

2.2 재귀함수 호출

2.3 Map, List 차이

 

나의 문제풀이 방식 및 순서

- 알고리즘도 같이 공부중이며 첫 스텝이 재귀함수 호출이라서 만들었다.


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)));
        StringTokenizer st = new StringTokenizer(br.readLine()," ");

        int inputData = Integer.parseInt(st.nextToken());

        for(int i=1;i<10;i++){
            System.out.println(inputData + " * " + i + " = " + (inputData*i));
        }

    }
}

 

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 = new StringTokenizer(br.readLine()," ");

        cal(Integer.parseInt(st.nextToken()),1,9);

        for(int i=1;i<10;i++){
            
        }

    }
    public static void cal(int i,int begin,int end){
        if(begin==10){
            return;
        } else {
            System.out.println(i + " * " + begin + " = " + (i*begin));
            cal(i,begin+1,end);
        }
        
    }
}

4. 추가 개념

 

List 는 인터페이스 , ArrayList는 클래스
Map은 인터페이스, HashMap은 클래스

Push는 Stack과 같은 자료구조(LIFO)에 사용
Add는 순서있는 요소에 사용
ArrayList<Integer> num = new ArrayList<>();
/*
num 변수를 ArrayList 클래스의 인스턴스로 선언합니다.
num은 ArrayList 클래스의 특정 인스턴스를 참조합니다.
*/

/*추천하는 방법*/
List<Integer> num = new ArrayList<>();
/*
num 변수를 List 인터페이스의 인스턴스로 선언합니다.
num은 ArrayList 클래스의 인스턴스 또는 List 인터페이스를 구현한 다른 클래스의 인스턴스를 참조할 수 있습니다.
*/
728x90
반응형

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

[BOJ/백준] 반복문_8393번  (0) 2024.05.08
[BOJ/백준] 반복문_10950  (0) 2024.05.08
[BOJ/백준] 조건문_2480번  (0) 2024.05.07
[BOJ/백준] 조건문_2884  (0) 2024.05.07
[BOJ/백준] 조건문_2525  (0) 2024.05.07
반응형

1. 문제 번호 2480번


 

2. 문제 풀이 

2.1 간단한 오름차순 방법(매우 효율적)

2.2 함수를 만들어서 중복데이터의 존재 여부 확인 (재귀함수??)

2.3 중복카운트(Stream)

 

 

나의 문제풀이 방식 및 순서

- 배열에 데이터를 넣어, if문으로 인덱스의 Value별로 비교하고 싶지 않아서 컬렉션을 사용 시도 (java스킬 향상 목적)

    - HashMap 을 시도했지만 사용방법을 모름

    - Stream 시도했지만 현재의 나로써 직관적이지 않음

    - 이중 for문 시도

          - >  case1. input(6 6 6) 일때 인덱스 0,1,2 를 비교하였고 1,2를 비교하는 와중에 횟수가 더 증가해버림

                             input(6 3 6) 일때는 정상 작동 (return false를 사용하면 됐는데..)


3. 소스 인증

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        // 주사위 눈을 저장할 배열 생성
        int[] dice = new int[3];
        
        // 주사위 눈 입력 받기
        for (int i = 0; i < 3; i++) {
            dice[i] = scanner.nextInt();
        }

        // 주사위 눈을 오름차순으로 정렬
        Arrays.sort(dice);

        // 중복 여부 확인
        if (dice[0] == dice[2]) {
            // 같은 눈이 3개인 경우
            System.out.println(10000 + dice[0] * 1000);
        } else if (dice[0] == dice[1] || dice[1] == dice[2]) {
            // 같은 눈이 2개인 경우
            System.out.println(1000 + dice[1] * 100);
        } else {
            // 모두 다른 눈인 경우
            System.out.println(dice[2] * 100);
        }
    }
}

 

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

class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine()," ");
        
        List <Integer> dice = new ArrayList<>();
        while(st.hasMoreTokens()){
            dice.add(Integer.parseInt(st.nextToken()));
        };
        
        Map<Integer, Integer> countMap = new HashMap<>();
        for(int d : dice) {
            countMap.put(d, countMap.getOrDefault(d, 0) + 1);
        }
        
        int maxNum = Collections.max(dice);
        
        switch(countMap.size()){
            case 1:
                System.out.print(10000+(maxNum*1000));
                break;
            case 2:
                for(int key : countMap.keySet()) { //EntrySet() key Value 전체출력
                    if(countMap.get(key) == 2) {
                        maxNum = key;
                        break;
                    }
                }
                System.out.print(1000+(maxNum*100));
                break;
            default :
                System.out.print(maxNum*100);
        }
        
    }
}

 

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

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

Writer : KTH
Purpose: 

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

class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine()," ");
        
        List <Integer> dice = new ArrayList<>();
        while(st.hasMoreTokens()){
            dice.add(Integer.parseInt(st.nextToken()));
        };

        
        HashMap <Integer,Integer> mapCnt = dupliCnt(dice); 
        
        // 방법 1
        // String[] names = null;
        // names = new String[] { “혼공자”, “혼공족장”, “자바맨” };

        // 방법 2
        // String [] names = new String[3];

        // int [] dice = new int [3];
        // for(int i = 0; i<4; i++){
        //     dice.put(Integer.parseInt(st.nextToken()));    
        // };

        // 1.dice안에 중복된 숫자의 갯수를 샌다.
        // 2.중복횟수에 따른 수식을 나눈다.
        
        // System.out.println(resultHour+" "+resultMinutes);

        // HashMap에 중복된 숫자와 해당 숫자의 개수가 들어있는지 확인합니다.
        for (Map.Entry<Integer, Integer> entry : mapCnt.entrySet()) {
            System.out.println("중복된 숫자: " + entry.getKey() + ", 개수: " + entry.getValue());
        }

    }

    public static HashMap<Integer,Integer> dupliCnt(List<Integer> dice){
        HashMap<Integer, Integer> countMap = new HashMap<>();
        for (int i = 0; i < dice.size(); i++) {
            int num = dice.get(i);
            countMap.put(num, countMap.getOrDefault(num, 0) + 1);
        }
        return countMap;
    }
}

 

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 = new StringTokenizer(br.readLine()," ");
        
        List<Integer> dice = new ArrayList<>();
        while(st.hasMoreTokens()){
            dice.add(Integer.parseInt(st.nextToken()));
        }

        Map<Integer,Integer> countMap = new HashMap<>();
        for(int d : dice){
            countMap.put(d, countMap.getOrDefault(d,0)+1);
        }

        //순차탐색
        int maxNum = findMax(dice, 0, dice.size()-1);

        switch(countMap.size()){
            case 1:
                System.out.print(10000+(maxNum*1000));
                break;
            case 2:
                for(int key : countMap.keySet()) { //EntrySet() key Value 전체출력
                    if(countMap.get(key) == 2) {
                        maxNum = key;
                        break;
                    }
                }
                System.out.print(1000+(maxNum*100));
                break;
            default :
                System.out.print(maxNum*100);
        }
        
    }

    public static int findMax(List<Integer> data, int begin, int end){
        if(begin==end){
            return data.get(begin);
        } else {
            return Math.max(data.get(begin), findMax(data, begin+1, end));
        }
        
    }
}

4. 추가 개념

 

HaspMap getOrDefault 

HashMap의 경우 동일 키 값을 추가할 경우 Value의 값이 덮어쓰기

String [] alphabet = { "A", "B", "C" ,"A"};
HashMap<String, Integer> hm = new HashMap<>();
for(String key : alphabet) hm.put(key, hm.getOrDefault(key, 0) + 1);
System.out.println("결과 : " + hm);
// 결과 : {A=2, B=1, C=1}

 

 

 

ArrayList

ArrayList vs 배열

 

ArrayList 특징

 

 

  • 연속적인 데이터의 리스트 (데이터는 연속적으로 리스트에 들어있어야 하며 중간에 빈공간이 있으면 안된다)
  • ArrayList 클래스는 내부적으로 Object[] 배열을 이용하여 요소를 저장
  • 배열을 이용하기 때문에 인덱스를 이용해 요소에 빠르게 접근할 수 있다.
  • 크기가 고정되어있는 배열과 달리 데이터 적재량에 따라 가변적으로 공간을 늘리거나 줄인다.
  • 그러나 배열 공간이 꽉 찰때 마다 배열을 copy하는 방식으로 늘리므로 이 과정에서 지연이 발생하게 된다.
  • 데이터를 리스트 중간에 삽입/삭제 할 경우, 중간에 빈 공간이 생기지 않도록 요소들의 위치를 앞뒤로 자동으로 이동시키기 때문에 삽입/삭제 동작은 느리다.
  • 따라서 조회를 많이 하는 경우에 사용하는 것이 좋다

배열 장단점

  • 처음 선언한 배열의 크기(길이)는 변경할 수 없다. 이를 정적 할당(static allocation)이라고 한다.
  • 데이터 크기가 정해져있을 경우 메모리 관리가 편하다.
  • 메모리에 연속적으로 나열되어 할당하기 때문에 index를 통한 색인(접근)속도가 빠르다.
  • index에 위치한 하나의 데이터(element)를 삭제하더라도 해당 index에는 빈공간으로 계속 남는다. 
  • 배열의 크기를 변경할 수 없기 때문에, 처음에 너무 큰 크기로 설정해주었을 경우 메모리 낭비가 될수 있고, 반대로 너무 작은 크기로 설정해주었을 경우 공간이 부족해지는 경우가 발생 할 수 있다.
// 타입설정 Integer 객체만 적재가능
ArrayList<Integer> members = new ArrayList<>();

// 초기 용량(capacity)지정
ArrayList<Integer> num3 = new ArrayList<>(10);

// 배열을 넣어 생성
ArrayList<Integer> list2 = new ArrayList<>(Arrays.asList(1,2,3));

// 다른 컬렉션으로부터 그대로 요소를 받아와 생성 (ArrayList를 인자로 받는 API를 사용하기 위해서 Collection 타입 변환이 필요할 때 많이 사용)
ArrayList<Integer> list3 = new ArrayList<>(list2);

 

출처: https://inpa.tistory.com/entry/JAVA-☕-ArrayList-구조-사용법#배열_장단점 [Inpa Dev 👨‍💻:티스토리]

 

🧱 자바 ArrayList 구조 & 사용법 정리

ArrayList 컬렉션 자바의 컬렉션 프레임워크를 접한다면 가장 먼저 배우는 컬렉션이 ArrayList 일 것이다. 자료구조(Data Structure) 이라고 해서 무언가 방대하게 느껴져 접근이 어려울 것 처럼 느끼겠지

inpa.tistory.com

 

 

728x90
반응형

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

[BOJ/백준] 반복문_10950  (0) 2024.05.08
[BOJ/백준] 반복문_2739번  (0) 2024.05.08
[BOJ/백준] 조건문_2884  (0) 2024.05.07
[BOJ/백준] 조건문_2525  (0) 2024.05.07
[BOJ/백준] 조건문_14681  (0) 2024.05.03
반응형

1. 문제 번호 2884번


 

2. 한 줄 키워드 

 - 입력값 시간,분을 합산한 분(=totalMinutes)으로 변경

 - totalMinutes < 0 일때는 전 일자로 만들어줌

 


나의 문제풀이 방식 및 순서

 - 입력값에 대해서 Validatation (hh==24 && mm==00) || (hh<=23 && mm < 60) 처리 시도

    -> 더 효율적인 방법이 있기 때문에 전체를 컨트롤 하는것은 좋지 못함..

 

- mm < 45 일때 hh - 1 로 처리하려 시도

   -> 0시 30분일때는 23으로 돌아가야 하는 부분에서 고민하다가 다시 if문을 넣으려다가 코드가 지저분해서 취소함

if (mm >= 45 ){
    mm = mm-45;
} else {
    hh = hh - 1;
    mm = 60-45+mm;
}

 



3. 소스 인증

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

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

Writer : KTH
Purpose: 

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

class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());

        int I_hh = Integer.parseInt(st.nextToken());
        int I_mm = Integer.parseInt(st.nextToken());
        
        int totalMinutes = I_hh * 60 + I_mm;
        int targetMinutes = totalMinutes - 45;

        if (targetMinutes < 0) {
            targetMinutes += 24 * 60;
        }

        int resultHour = targetMinutes / 60 ;
        int resultMinutes = targetMinutes % 60;
        
        System.out.println(resultHour+" "+resultMinutes);

    }
}

4. 추가 개념

 

 

 

728x90
반응형

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

[BOJ/백준] 반복문_2739번  (0) 2024.05.08
[BOJ/백준] 조건문_2480번  (0) 2024.05.07
[BOJ/백준] 조건문_2525  (0) 2024.05.07
[BOJ/백준] 조건문_14681  (0) 2024.05.03
[BOJ/백준] 조건문_2753  (0) 2024.05.03

+ Recent posts