목록전체 (348)
파게로그
문제 링크: Lv.2 124 나라의 숫자 https://programmers.co.kr/learn/courses/30/lessons/12899 나만 Lv.2라고 안 느껴졌을까...? 처음에 설명 듣고 아아~ 하다가 풀다보니까 생각보다 더 어려웠다. 풀이를 보고서도 아리송한 부분이 남아있는데, 진법 개념이 덜 잡힌 것 같다.생각해보니까, 진법의 변환 과정을 이용하지만, 진법 문제는 아니다. 어떤 자연수를 2진법으로 변환하는 과정을 미리 생각해두자. 14 = 2^3 * 1 + 2^2 * 1 + 2^1 * 1 + 2^0 * 0 우변의 각 항을 base^exp * coef라 표현할 때, coef는 0 또는 coef < base인 자연수이다. 당연하게도, coef가 base가 되어버리면 이는 한 자리 위로 올라가..
Python list.sort(key=None,reverse=False) 리스트의 항목들을 제자리에서 정렬합니다 (인자들은 정렬 커스터마이제이션에 사용될 수 있습니다.) sorted(iterable,*,key=None,reverse=False) iterable의 항목들로 새 정렬된 리스트를 돌려줍니다. 키워드 인자로만 지정해야 하는 두 개의 선택적 인자가 있습니다. key는 하나의 인자를 받는 함수를 지정하는데, iterable의 각 요소들로부터 비교 키를 추출하는 데 사용됩니다(예를 들어, key=str.lower). 기본값은 None입니다(요소를 직접 비교합니다). reverse는 논리값입니다. True로 설정되면, 각 비교가 뒤집힌 것처럼 리스트 요소들이 정렬됩니다. 예전 스타일의 cmp 함수를 k..
문제 링크: 10989번 수 정렬하기 3 https://www.acmicpc.net/problem/10989 단순히 counting sort를 쓴다고 해서 통과하는 문제는 아니고, 알고리즘 문제를 풀 때 한 번쯤 거쳐가는, '불편하지만 빠른' 입출력 방식을 사용해야 하는 문제다. 자바의 경우, 입력에 대해서 다음과 같은 설명을 할 수 있다. Scanner versus. BufferedReader 일반적으로는 Scanner 클래스를 이용하는데, 버퍼 크기가 1KB로 작고, regExp를 통해 구문 분석 및 지정된 타입으로의 파싱을 진행하며, 동기화되어 있지 않아 멀티쓰레딩 환경에서 안전하지 않으며, 개발자가 Exception Handling을 진행하지 않는다. 반면 BufferedReader의 경우, 버퍼..
C에서처럼 Java에서도 goto문이 있었나보다. 지금은 break \[label\];과 같이 label 개념이 있어서, 반복문을 한 번에 빠져나올 수 있다. 이걸 모르고 지금까지 flag 같은 변수를 만들어 썼으니... 레퍼런스를 꼼꼼히 읽지 않았기에, 전적으로 내 잘못이다. package ex4.iter.label; import java.util.Scanner; public class Ex4 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); outer: // label while (true) { // display menu System.out.println("1. 인사받기"); System.out.printl..
arr = [1, 2, 6, 2, 3, 2, 2, 4, 4]일 때, 정렬 결과는 [1, 2, 2, 2, 2, 3, 4, 4, 6]이 된다. 즉 중복 원소의 개수를 고려한다면, 인덱스의 개수가 정해진다는 것이다. arr에 대해서, arr의 각 원소에 대한 빈도값을 담는 countingArr와 countingArr의 누적합을 담는 idxArr를 만들면, 아래와 같다. countingArr = [0, 1, 4, 1, 2, 0, 1], idxArr = [0, 1, 5, 6, 8, 8, 9] coutingArr[n]의 의미는, arr에서 n이 countingArr[n]개 있다는 의미이다. 즉 countingArr[2] = 4라는 것은, arr에서 2가 4개 있다는 의미이다. idxArr[n]의 의미는, sorte..
문제 링크: 2751번 수 정렬하기 2 https://www.acmicpc.net/problem/2751 merge sort를 C++로 구현해 보았다. #include #include using namespace std; vector sliceVector(vector arr, int start, int end) { // arr[end]는 결과에 포함되지 않는다. // 파이썬에서 슬라이싱과 동일하게 구현했다. vector res; for (int i=start; i
문제 링크: 2750번 수 정렬하기 https://www.acmicpc.net/problem/2750 O(n^2) 알고리즘으로 풀린다고 하니, 정렬에서 설명하지 않았고 구현이 간단한 selection sort를 사용한다. #include #include using namespace std; void swap(int *a, int *b) { int temp = *a; *a = *b; *b = temp; } bool compare(int a, int b) { // 왼쪽이 더 크면 true, 그렇지 않으면 false if (a>b) return true; else return false; } void selectionSort(vector &arr) { // 바깥쪽 for문을 돌 때마다 arr[i]가 가장 작은..
1.3 Computer-System Architecture 1.3.1 Single-Processor Systems 싱글 프로세서 시스템에는 general-purpose instruction set을 실행할 수 있는 CPU가 하나 있고, 대부분 이러한 시스템에는 특수 목적의 프로세서를 별도로 가지고 있다. 그것은 디스크, 키보드, 그래픽 컨트롤러의 device-specific한 프로세로서이다. mainframe에서는 보다 general-purpose processors의 형태인데 I/O processor와 같은 것이다. 이러한 프로세서는 운영체제에 의해 관리되기도 하고, 그렇지 않기도 한다. 이 때 관리라는 것은 운영체제가 정보를 보내거나, 다음 작업을 알려주거나, 상태를 감시하는 것을 말한다. 또 어떤 ..