목록전체 글 (32)
개발 공부
앞전의 글인 엄청난 부자2 와같이 c++로 하게되면 어려워지는 문제! 조건을 살펴보면 10진수로 1,000자리를 넘지 않으며 여기서 1000자리를 보고 그냥 1000을 넘지 않는다고 생각을 해서 왜 안될까 했는데 다시 살펴보니.... 자리수...? 1뒤로 0이 999개???? 역시 오버플로우... 최대로 들어올 수 있는수가 너무 크다.. c++에서 int형은 대략 -21억 ~ 21억까지 표현가능 => 최대 10자리수 까지 표현가능 파이썬에서는 자체적으로 Big integer를 지원해줘 따로 처리할 필요없이 짧게 A = int(input()) B = int(input()) print(A+B) print(A-B) print(A*B) 이렇게 구현가능...! 나같은 코딩애기는 자리수 나오면 파이썬으로....ㅠㅠ
브론즈5...? 입력값의 조건이 첫째 줄에는 최백준 조교가 가진 돈 n과 돈을 받으러 온 생명체의 수 m이 주어진다. (1 ≤ m ≤ n ≤ 10^1000, m과 n은 10진수 정수) >> c에서는 10^1000이라는 큰 수를 정수형으로 표현할 수 없음... (10^20만 하더라도 100000000000000000000 , long의 범위는 2,147,483,647) 따라서 오버플로우로 인해 문제가 틀린게 됨!! 브론즈 5인 이유는 파이썬으로 하면 쉬워진다!!! 파이썬은 정수 연산을 할 때 처음에는 int자료형을 사용하다가 정수 오버플로우가 발생할 것 같으면 자동으로 long을 사용하는 방식을 통해 정수 오버플로우의 발생을 막는다, >> long은 무제한의 자릿수를 제공하는 정수형을 의미하는 Arbitr..
코딩테스트를 준비하며 다른사람들의 풀이를 살펴보면 C++에서 cin보다 scanf를 사용한 경우를 많이 볼 수 있었다. 학교에서 배운 기억으로는 C++에서의 표준입력은 cin으로 알고 있었는데 cin과 scanf에는 무슨 차이가 있는지 찾아 보았다?? 1. cin - iostream헤더 파일에 입력 스트림을 나타내는 객체로 정의 - 문자열, 수, 문자 등 다양한 데이터형을 서식문자 없이 변수형에 맞게 자동으로 입력해준다. - cin은 키보드로 입력한 값을 저장할 변수가 받아들이는 형태로 알아서 바꿔서 저장한다. cin과 scanf의 차이점 - 알고리즘 문제 해결에 있어서, scanf와 printf가 입출력 속도가 훨씬 빠르다고 한다 - whitespace의 저장에도 차이가 있는데 cin은 문자를 받을 때..
: 물리 메모리보다 큰 프로세스를 실행시 물리 메모리 크기 한계를 극복하기 위해 사용 어떻게 사용? - 프로세스 이미지를 모두 메모리에 올릴 필요는 없음 - 현재 실행에 필요한 부분만 메모리에 올린다. - 오류처리 제외, 배열 일부 제외, 워드 프로세스에서 정렬, 표 기능 제외 >> 동적 적재(dynamic loading)과 비슷한 개념 ● Demand Paging - 프로세스 이미지는 backing store(H/W)에 저장 - 프로세스는 페이지의 집합 - 지금 필요한 페이지만 메모리에 올린다.(load) >>요구되는(demand) 페이지만 메모리에 올린다. ● 하드웨어 지원 - valid비트 추가된 페이지 테이블 : 메모리에 없으면 0, 있으면 1 - backing store (= swap devic..
●프로세스를 논리적 내용(=세그멘트)로 잘라서 메모리에 배치 -프로세스는 세그먼트의 집합 - 세그멘트의 크기는 일반적으로 같지 않다. ●세그멘트를 메모리에 할당 MMU 내의 재배치 레지스터 값을 바꿈으로써 CPU는 프로세스가 연속된 메모리 공간에 위치한다고 착각 MMU는 세그먼트 테이블이 된다. 주소변환 ●논리주소 : CPU가 내는 주소는 세그멘트 번호(s) + 변위(d) ● 주소변환 : 논리 주소 -> 물리주소 - 세그멘트 테이블 내용 : base + limit - 세그멘트 번호(s)는 세그멘트 테이블 인덱스 값 - s에 해당되는 테이블 내용으로 시작 위치 및 한계값 파악 - 한계(limit)을 넘어서면 segment violation 예외상황 처리 - 물리주소 = base[s] + d Limit Ba..
:프로세스를 일정 크기인 페이지로 잘라서 메모리에 적재하는 방식 *메모리에 올라온 프로그램은 연속되어야 실행이 됨.. * 그렇다면 잘라서도 프로그램이 돌려면 어떻게 해야할까? >> CPU를 속이면 된다. CPU를 속이려면? -MMU에 다수의 relocation register(재배치 레지스터)를 두어 CPU가 보낸 주소에 재할당 주소를 추가해 조각난 프로세스를 조각난 메모리에 일정 단위별로 할당해서 프로세스를 돌린다. 정리 프로세스를 자르는 단위는 페이지(page) 동일한 크기로 메모리를 자른것이 프레임(frame) >>페이지(프로세스)를 프레임(메모리)에 할당 MMU내의 재배치 레지스터의 값을 바꿈으로써 CPU는 프로세스가 연속된 메모리 공간에 위치한다고 착각을 함 MMU는 페이지 테이블(page ta..
메모리 용량 증가 vs 프로그램 크기 증가 1960~1970년대는 프로그램을 기계어로 작성했는데 C,C++,자바... 객체지형적인 언어가 개발되고 작성해서 메모리양이 엄청 커지게 되었습니다. >>늘 언제나 부족한 메모리 메모리를 효과적으로 사용하기 위한 방법 1. 메모리 낭비 없애기 2. 가상 메모리 (virtual memory) 프로그램을 메모리에 올리기 ● 메모리의 구조 주소(address) + 데이터(Data) CPU가 메모리의 어디를 읽겠다고 Address를 메모리에 보냄 (메모리 입력은 주소) 메모리는 해당위치의 저장 데이터를 cpu에 보냄 (메모리 출력은 데이터) >> 메모리 주소= 주소+데이터 ● 프로그램 개발 소스파일 - (컴파일러, 어셈블러) >> 목적파일 - (링크) >> 실행파일 >>..
하나의 앱은 보통 여러 화면으로 구성이 되는데 이러한 경우 사용자는 뷰를 클릭하고 스마트폰은 이에 반응해 다른 화면을 출력합니다. android:clickable = "true"; // 뷰를 클릭했을 때 반응 여부(true/false) android:onClick = "callback" ; // 뷰가 클릭되었을 때 자동으로 실행되는 메소드 이름 >>특정 이벤트가 발생했을 때 시스템이 인지하고 이벤트를 처리하기 위해 호출하는 메소드를 콜백(callback)메소드라고 합니다. 여기서 callback() 메소드가 이에 해당합니다. 이 메소드는 MainActivity에서 구현한 callback(View v)를 호출합니다. 액티비티의 호출과 액티비티간의 데이터 전달은 인텐트 클래스를 활용합니다. activity_..
안드로이드는 4개의 컴포넌트로 구성되고, 각 컴포넌트는 인텐트를 통해 상호 통신을 합니다. >> Activity, Service, Broadcast Receiver, Content Provider 1. Activity 앱의 UI화면을 담당하는 컴포넌트 액티비티 역할을 위해서는 자바 소스에서 Activity클래스를 상속하여 기본적으로 가지고 있는 생명주기 메소드를 재정의하여 원하는 기능을 구현하는 방식으로 제작함 각 액티비티는 다른 액티비티를 실행할 수 있고, 다른 액티비티가 실행이 되면 이전의 액티비티는 정지되지만 시스템이 백스텍이라는 스텍에 저장해 둬서 없어지지 않습니다. >>백스텍은 후입선출을 따라 사용자가 뒤로가기 버튼을 누를 경우 스택의 최상위인 현재 액티비티를 제거하고 이전의 액티비티를 실행합니..
Intent란? 어플리케이션을 구성하는 구성요소(컴포넌트)간의 작업을 수행하기 위한 정보를 전달하는 역할(매세지 객체)을 합니다 예) 액티비티간의 화면전환 사용방법 (main) 1. 인텐트 생성 Intent intent= new Intent(this, second.class); 2. 데이터 저장 intent.putExtea("it_tag", tag); 3. 호출할 액티비티 실행 startActivity(intent); 4. 현재 액티비티 종료 finish(); (second 호출된 액티비티) 5. 자신을 호출한 인텐트 인식 Intent intent = getIntent(); 6. 데이터 추출 String str_tag = intent.getStringExtra("it_tag"); Intent 구분 1. ..