반응형
문제 설명
 

1946번: 신입 사원

첫째 줄에는 테스트 케이스의 개수 T(1 ≤ T ≤ 20)가 주어진다. 각 테스트 케이스의 첫째 줄에 지원자의 숫자 N(1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N개 줄에는 각각의 지원자의 서류심사 성

www.acmicpc.net

모든 지원자와 비교 시 서류심사와 면접심사 성적 중 적어도 하나가 다른 지원자보다 떨어지지 않는 자만 선발한다.

<-(대우)-> 어떤 지원자와 비교 시 서류심사와 면접심사 성적 모두 다른 지원자보다 떨어지는 자는 선발하지 않는다.

 

 

문제 풀이

전체를 각각 다 비교할 경우 시간복잡도는 N의 2제곱. 이 문제의 경우 N은 100,000까지 주어지므로 100,000 x 100,000 = 100억이다. 1억에 1초라고 할 때, 100초가 걸리므로 문제의 시간제한 2초에는 턱없이 불가능하다.

 

따라서 다른 방식으로 구현해야했다.

 

두 종류의 수를 동시에 비교해야 하므로 둘 중 하나는 일정한 기준에 배열하는 것이 비교하기 편하겠다고 생각했다.

 

그래서 N+1크기의 배열을 만들고, 서류심사 등수에 맞춰 면접심사 결과를 넣었다.

 

등수는 중복되지 않으므로 , 1번째 배열부터 N번째까지 비교를 진행하면, 서류심사는 무조건 낮은 등수이므로 면접결과에 따라 정해진다.

 

면접결과가 이전에 나온 최소값보다 작은 수가 나온 경우가 선발할 수 있는 지원자이다.

 

이에 맞춰 코드를 구현하였다.

 

문제 풀이 코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class _1946_신입사원_배열 {
	
	public static void main(String[] args) throws NumberFormatException, IOException {
		BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
		int T = Integer.parseInt(in.readLine());
		for(int tc = 1;tc<=T;++tc) {
			int N = Integer.parseInt(in.readLine());
			int[] arr = new int[N+1];
			StringTokenizer st;	
			for(int i = 0; i<N;++i){
				st = new StringTokenizer(in.readLine());
				arr[Integer.parseInt(st.nextToken())]=Integer.parseInt(st.nextToken());
			}
			int count = 1;
			int BigB = arr[1];
			for(int i = 1; i<=N;++i) {
				if(BigB == 1) {
					break;
				}
				if(arr[i] < BigB) {
					++count;
					BigB = arr[i];
				}
			}
			System.out.println(count);
		}
	}
}

반응형

'알고리즘 문제풀이 > 백준' 카테고리의 다른 글

Baekjoon_17142_연구소3  (0) 2020.12.17
Baekjoon_17141_연구소2  (0) 2020.12.17
Baekjoon_1541_잃어버린 괄호  (0) 2020.12.15
Baekjoon_2217_로프  (0) 2020.12.15
Baekjoon_1074_Z  (0) 2020.12.14
반응형

CSR(Client Side Rendering)

클라이언트측에서 화면을 렌더링하는 방식이다.

 

작동 방식

  1. 브라우저가 서버에 HTML문서를 요청하면 서버는 요청받은 HTML을 반환한다
  2. 브라우저가 서버에 필요한 데이터를 요청하고 서버는 요청받은 데이터를 반환한다.
  3. 브라우저는 자바스크립트를 다운받는다. (로딩중)
  4. 화면이 활성화된다.

장단점

  • 장점
    • 첫 로딩에 HTML과 static파일을 다 받으면 동적으로 렌더링하기 때문에 UX(User Experience)가 뛰어나다.
    • 서버에 요청하는 횟수가 훨씬 적어 서버 부담이 줄어든다.
  • 단점
    • 모든 HTML과 static 파일이 로드될 때까지 기다려야 한다.
    • SEO(검색 엔진 최적화) 문제가 발생할 수 있다.

 

SSR(Server Side Rendering)

서버측에서 화면을 렌더링하는 방식이다.

 

작동 방식

  1. 브라우저가 서버에 요청을 보내면 서버는 완전하게 만들어진 HTML파일을 반환한다.
  2. 브라우저는 자바스크립트를 다운받는다. (화면은 보여지지만 비활성화 상태)
  3. 화면이 활성화된다.

장단점

  • 장점
    • 초기 로딩 속도가 빨라 사용자가 컨텐츠를 빨리 볼 수 있다.
    • 모든 검색엔진에 대한 SEO(검색 엔진 최적화)가 가능하다.
  • 단점
    • 페이지를 요청할 때마다 새로고침되기 때문에 UX가 다소 떨어진다.
    • 서버에 매번 요청하기 때문에 트래픽, 서버 부하가 커진다.

 

 

https://n-square.tistory.com/40

 

https://velog.io/@namezin/CSR-SSR#spa%EC%97%90%EC%84%9C-ssr%EC%9D%84-%EA%B5%AC%EC%84%B1%ED%95%A0-%EC%88%98%EB%8A%94-%EC%97%86%EB%8A%94%EA%B0%80


참고 자료

반응형

'기술 정리 > Web' 카테고리의 다른 글

[Web]JPA(Java Persistence API)  (0) 2021.01.11
[Web]플랫폼과 프레임워크  (0) 2020.12.17
반응형
문제 설명

  • +, -, 숫자로 이루어진 식이 주어진다.
  • '괄호를 적절히 쳐서' => '연산 순서를 적절히 선택해서'

=> 이 식의 값을 최소로 만들어 출력

 

 

문제 풀이

*와 / 가 없기 때문에 비교적 단순한 문제였다.

 

식의 결과가 최소가 되려면 - 연산을 수행하는 수가 최대가 되어야 한다.

 

이를 위해 처음에는 - 뒤의 + 연산을 모두 수행한 후 계산하면 될 것이라 추측했다.

 

하지만 이렇게 연산하면 - 앞의 + 들은 남아있게 된다. 이 + 들은 연산을 먼저하든 나중에하든 남은 - 를 연산하는 과정에서 결과값을 최소화하는데 도움을 주지 않기 때문에, 결과적으로 모든 + 를 연산한 후 남은 - 를 연산하도록 구현했다.

 

따라서 deque에 숫자, queue에 연산기호를 넣고, + 연산기호가 사용되는 수들을 먼저 연산했다.

 

이렇게 남은 수 중 맨 앞의 수를 제외한 나머지는 전부 - 연산을 수행하므로 최소값을 구할 수 있다.

 

문제 풀이 코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayDeque;
import java.util.Deque;
import java.util.LinkedList;
import java.util.Queue;

public class _1541_잃어버린괄호 {
	public static void main(String[] args) throws IOException {
		BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
		char[] chars = in.readLine().toCharArray();
		Deque<Integer> numbers = new ArrayDeque<>();
		Queue<Character> signs = new LinkedList<>();
		int idx = 0;
		StringBuilder sb = new StringBuilder();
		for(int i = 0; i<chars.length;++i) {
			if(chars[i] >= '0' && chars[i]<='9') {	//숫자일 때
				sb.append(chars[i]);
			}else {	//기호일 때
				numbers.add(Integer.parseInt(sb.toString()));
				sb.setLength(0);
				signs.add(chars[i]);
			}
		}
		numbers.add(Integer.parseInt(sb.toString()));	//마지막 수 넣기
		numbers.add(numbers.pop());	//맨 앞에 있는 수 맨 뒤로 보내기
		while(!signs.isEmpty()) {	// + 먼저 연산
			char sign = signs.poll();
			if(sign == '+') {
				int num1 = numbers.pollFirst();
				int num2 = numbers.pollLast();
				numbers.add(num1+num2);
			}else {
				numbers.add(numbers.pop());	//맨 앞에 있는 수 맨 뒤로 보내기
			}
		}
		int answer = numbers.pop();
		while(!numbers.isEmpty()) {	//남은 - 연산
			answer -= numbers.pop();
		}
		System.out.println(answer);
	}
}

반응형

'알고리즘 문제풀이 > 백준' 카테고리의 다른 글

Baekjoon_17141_연구소2  (0) 2020.12.17
Baekjoon_1946_신입사원  (0) 2020.12.16
Baekjoon_2217_로프  (0) 2020.12.15
Baekjoon_1074_Z  (0) 2020.12.14
Baekjoon_20303_할로윈의 양아치  (0) 2020.12.10
반응형
문제 설명

  • 로프 N개
  • k개의 로프로 w중량의 물체를 들어올릴 때 한 로프에 가해지는 무게는 w/k

=> 로프들을 이용하여 들어올릴 수 있는 물체의 최대 중량 출력

 

문제 풀이

로프를 이용해 들 수 있는 최대 중량을 구하려면 로프가 들 수 있는 무게는 크면서, 로프가 많아 무게를 최대한 나눠가져야 한다.

 

로프 3개가 버틸 수 있는 질량이 100, 100, 100 이라고 하면 중량 x의 물체가 한 로프 당 x/3씩 가해진다. 각각의 로프는 100씩 버틸 수 있으므로 이 로프들이 들 수 있는 물체의 최대 중량은 300이다.

 

하지만 로프 3개가 버틸 수 있는 질량이 100, 100, 10 이라고 하면 세번째 로프가 10밖에 버티지 못하기 때문에 중량 30의 물체가 최대 중량이 된다.

 

따라서 로프를 a개 고르고 로프 중 가장 적은 무게를 들 수 있는 로프의 최대 중량이 b일 때, 이 로프들이 들 수 있는 무게의 최대는 a x b 이다.

 

이를 이용해 우선순위 큐에 로프의 최대 중량 값을 입력받고, 가장 중량 값이 적은 로프부터 (로프의 무게 x 로프의 개수)를 연산하고, 그 중 최대 값을 찾아 출력했다.

 

 

문제 풀이 코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.PriorityQueue;

public class _2217_로프 {
	public static void main(String[] args) throws IOException{
		BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
		int N = Integer.parseInt(in.readLine());
		PriorityQueue<Integer> pq = new PriorityQueue<>();
		for(int i  =0; i<N;++i) {
			pq.add(Integer.parseInt(in.readLine()));
		}
		
		int max = 0;
		while(!pq.isEmpty()) {
			max = Math.max(max, pq.poll() * (pq.size()+1));
		}
		System.out.println(max);
	}
}

 

반응형

'알고리즘 문제풀이 > 백준' 카테고리의 다른 글

Baekjoon_1946_신입사원  (0) 2020.12.16
Baekjoon_1541_잃어버린 괄호  (0) 2020.12.15
Baekjoon_1074_Z  (0) 2020.12.14
Baekjoon_20303_할로윈의 양아치  (0) 2020.12.10
Baekjoon_20208_진우의 민트초코우유  (0) 2020.12.09
반응형

라이브러리(Library)

  • 특정 기능에 대한 도구, 함수를 모아놓은 집합이다.
  • 필요 시 사용자의 코드라이브러리를 호출하여 라이브러리 내부의 함수를 사용할 수 있다.
  • Java에서 라이브러리는 jar파일의 형태로 사용된다.

프레임워크

  • 뼈대, 기반구조를 말한다.
  • 프로그램을 개발할 때 원하는 기능 구현에만 집중해 빠르게 개발할 수 있도록 도와주는 도구이다.
  • 여러 클래스나 컴포넌트로 구성되어 있고, 재사용이 가능하다.
  • EX. Spring, Django, Angularjs

차이점

 라이브러리와 프레임워크의 차이는 제어 흐름에 대한 주도성이 어디에 있는지에 따라 달라진다.

 

프레임워크는 전체적인 흐름을 스스로 가지고 있고, 사용자의 코드를 호출해서 사용한다.

 

반면에 라이브러리는 사용자의 코드가 흐름을 가지고 있어서 라이브러리의 함수를 호출해서 사용한다.

반응형