sm 기술 블로그

[단계별] 백준 (답) java (88~) 본문

문제/백준_자바

[단계별] 백준 (답) java (88~)

sm_hope 2022. 5. 6. 11:45

88. 10814

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;


public class Main{
    public static void main(String[] args)throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();
        StringTokenizer st;
        int N = Integer.parseInt(br.readLine());
        String [][] S = new String[N][2];


        for(int i = 0; i < N; i++){
            st = new StringTokenizer(br.readLine()," ");
            S[i][0] = st.nextToken();
            S[i][1] = st.nextToken();
        }

        Arrays.sort(S, (S1, S2)->{
                
                return Integer.parseInt(S1[0]) - Integer.parseInt(S2[0]);
           
        });

        for(int i = 0; i < N; i++){
            sb.append(S[i][0] + " " + S[i][1] + "\n");
        }

        System.out.println(sb);


    }
}

String -> Int

https://nota.tistory.com/49

 

[JAVA] String to int, int to String 형변환

자바(JAVA) 형 변환(String과 int) Strinig to int String from = "123"; int to = Integer.parseInt(from); int to String int from = 123; String to = Integer.toString(from);

nota.tistory.com

만약 람다식을 쓰지 않는다면,

Arrays.sort(S, new Comparator<String[]>() {
			
			public int compare(String[] s1, String[] s2) {
				return Integer.parseInt(s1[0]) - Integer.parseInt(s2[0]);
			}
			
		});

 

 

객체를 이용하여 푸는 방법

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.util.Arrays;
import java.util.Comparator;
import java.util.StringTokenizer;
 
public class Main {
	public static void main(String[] args) throws IOException {		
 
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		int N = Integer.parseInt(br.readLine());
        
		Person[] p = new Person[N];
		
 
		for(int i = 0; i < N; i++) {
			StringTokenizer st = new StringTokenizer(br.readLine(), " ");
			int age = Integer.parseInt(st.nextToken());
			String name = st.nextToken();
			p[i] = new Person(age, name);
		}
 
		
		// 타입을 Person 으로 둘 것.
		Arrays.sort(p, new Comparator<Person>() {
			
			public int compare(Person s1, Person s2) {
				return s1.age - s2.age;
			}
			
		});
 
		StringBuilder sb = new StringBuilder();
		
		for(int i = 0; i < N; i++) {
			// 객체배열의 객체를 출력하면 해당 인덱스의 객체의 toString() 이 출력 됨
			sb.append(p[i]);
		}
        
		System.out.println(sb);
		
	}
    
	public static class Person {
		int age;
		String name;
        
		public Person(int age, String name) {
			this.age = age;
			this.name = name;
		}
        
        
		public String toString() {
			return age + " " + name + "\n";
		}
	}
 
}

 toString() 메소드는 객체를 출력할 때, 사용자의 임의로 출력하고자 하는 문자열을 지정할 수 있다.

 

StringBulider를 이용한 방법

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.util.StringTokenizer;
 
public class Main {
	public static void main(String[] args) throws IOException {
		
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        
		int N = Integer.parseInt(br.readLine());
 
		// 입력되는 나이의 범위 : 1 ~ 200
		StringBuilder[] p = new StringBuilder[201];
		
	
		for(int i = 0; i < p.length; i++) {
			p[i] = new StringBuilder();
		}
		
		for(int i = 0; i < N; i++) {
			StringTokenizer st = new StringTokenizer(br.readLine(), " ");
			int age = Integer.parseInt(st.nextToken());
			String name = st.nextToken();
			// 카운팅 정렬 : 나이를 index 로 하여 해당 배열에 나이와 이름을 append() 한다
			p[age].append(age).append(' ').append(name).append('\n');
		}
		
		StringBuilder sb = new StringBuilder();
		for(StringBuilder val : p) {
			sb.append(val);
		}
        
		System.out.println(sb);
	}
}

나이를 인덱스로 사용함. 

나이가 중복이 되더라도 문제 없음 -> 인덱스 에 값을 저장하는게 아니라 StringBulider에 저장함.

 

81. 18870

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.HashMap;
import java.util.StringTokenizer;

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

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

        int [] origin = new int[N];
        int [] sorted = new int[N];
        HashMap<Integer, Integer> rankingMap = new HashMap<Integer, Integer>();

        StringTokenizer st = new StringTokenizer(br.readLine()," ");
        for(int i = 0; i < N; i++){
            sorted [i] = origin[i] = Integer.parseInt(st.nextToken());
        }

        Arrays.sort(sorted);

        int rank = 0;

        for(int n : sorted){
            if(!rankingMap.containsKey(n)){
                rankingMap.put(n, rank);
                rank++;
            }
        }

        StringBuilder sb = new StringBuilder();
        for(int key : origin){
            int ranking = rankingMap.get(key);
            sb.append(ranking).append(' ');
        }
        System.out.println(sb);
    }
}

코드압축은 규칙을 가지고 (숫자가 낮은순으로) 코드를 정렬하는 것이다.

그림으로 살피면

https://coding-factory.tistory.com/556

 

[Java] 자바 HashMap 사용법 & 예제 총정리

HashMap 이란? HashMap은 Map 인터페이스를 구현한 대표적인 Map 컬렉션입니다. Map 인터페이스를 상속하고 있기에 Map의 성질을 그대로 가지고 있습니다. Map은 키와 값으로 구성된 Entry객체를 저장하는

coding-factory.tistory.com

위는 Hashmap을 선언하는 방법이다.

 

 

'문제 > 백준_자바' 카테고리의 다른 글

93. 10816(숫자 카드2)  (0) 2022.06.20
92. 1620(나는야 포켓몬 마스터 이다솜)  (0) 2022.06.19
91. 14425 (문자열 집합)  (0) 2022.06.19
90. 10815(숫자카드)  (0) 2022.06.19
[단계별] 백준 (답) java (1~87)  (0) 2022.04.18
Comments