분류 전체보기58 [Java] 백준 13172번 - Σ(시그마) https://www.acmicpc.net/problem/13172 문제 요약 n면체 주사위에 적힌 숫자의 합이 s라면, 기댓값은 s/n이다.m개의 주사위의 n값과 s값이 주어졌을때, 기댓값의 합을 구하면 된다. 단, 기댓값이 분수라면 정확한 답을 구하기가 힘들기 때문에 모듈러 곱셈에 대한 역원(b ^ -1)을 활용한다. 모듈러 곱셈에 대한 역원은 다음을 만족한다. 따라서 기댓값이 기약분수 a/b라면, (a × b^-1) mod 1,000,000,007으로 대신한다. 단순한 풀이 이 문제의 풀이 과정은 간단하다. (다만 수학공식이 나와서 진입장벽이 높을 뿐이다!)1) 주사위의 면수 n, 적힌 숫자의 합 s의 기댓값은 s/n이다.2) s/n을 기약분수로 만든다. 3) s/n 대신 (s * n^.. 2024. 5. 2. [한 권으로 읽는 컴퓨터 구조와 프로그래밍] 13. 컴퓨터 보안 보안 보안을 위해서는 우선적으로 위협 모델을 찾아야한다. 위협 모델은 보안이 필요한 대상 목록괴 긱 보안 대상에 가해질 수 있는 공격을 열거해서, 공격을 방어하는 방법을 설계할 수 있게한다. 위협모델을 정할 때 가장 어려운 부분은 신뢰할 대상을 정하는 것이다. 우리가 사용하는 수많은 서드파티 하드웨어나 소프트웨어에 우리는 의존하고 있다. 이들이 의도적으로, 또는 무능해서, 그리고 부정직하게 신뢰를 위반한다면, 우리의 보안도 취약해질 수 밖에 없다. 따라서 컴퓨터 보안 세계에서 신뢰란, 선택할 수 없지만 의존해야하는 대상이다. 공격에는 주로 두 가지 유형이 있다. 첫번째는 크립토그래피 시스템 공격이다. 크립토그래피란 데이터에 대한 암호화로, 이 암호 시스템의 취약점을 이용하여 공격하는 것이다. 이것.. 2024. 5. 1. [한 권으로 읽는 컴퓨터 구조와 프로그래밍] 12. 컴퓨터는 어떻게 멀티태스킹을 할까? 병렬성 초기의 컴퓨터는 하나의 CPU만을 가지고 있었다. 그렇기 때문에 두 가지 일을 동시에 처리하는 대신, 동시에 처리하는 '척'을 했다. 예를 들면 주황-초록-보라 순서대로 아주 조금씩 작업을 하는 것이다. 사람이 캐치하기 어려울 만큼 작은 단위로 일을 쪼개서 하면, 사람은 마치 동시에 일을 하는 것처럼 느낄 수 있는 것이다. 하지만 멀티 프로세서가 일반화되면서, '진짜로' 동시에 일을 처리해야하는 상황에 처하게 되었다. 동시에 일을 처리한다면, 같은 자원에 동시에 접근하는 경우도 발생할 수 밖에 없다. 0x0001이라는 메모리에 100이라는 값이 저장되어 있고, 10을 빼서 저장하는 프로세스1과 20을 빼서 저장하는 프로세스2가 이 메모리에 동시에 접근하는 경우를 생각해보자. 두 프로.. 2024. 4. 30. [eclipse] xml파일의 "Downloading external resources is disabled." 오류 해결 발생한 오류 Mybatis-spring을 사용하기 위해 root-context 파일을 작성하는데, "Downloading external resouces is disable" 이라는 오류가 뜨면서 xmlBeanDefinitionStoreException이 발생해 정상적으로 컴파일이 되지 않았다. 오류 원인 우선은 기존 컴퓨터와 작업하던 환경부터 맞췄다. 기존 작업환경에서는 sts-4.21.0 버전은 버그가 있어서 sts-4.22.0버전으로 업데이트 하였기 때문에 버전업부터 했지만 문제는 해결되지 않았다. 그래서 공식홈페이지에서 가져온 링크긴하지만, 혹시나 링크에 오류가 있을까봐 오류가 발생한 링크로 접속이 가능한지 확인차 들어가봤더니 아래 파일이 다운로드 되었다. 즉, url에 이상이 있는.. 2024. 4. 28. [한 권으로 읽는 컴퓨터 구조와 프로그래밍] 11. 알고리즘 아이디어 책에서 나온 예시들은 핵심 내용을 가릴 만큼 지나치게 복잡해, 조금더 간단한 예시로 바꾸어서 핵심 아이디어만을 전달하고자 했다.중요한 것은 각 예시를 이해하는 것이 아니라 성능과 효율성을 높이기 위해 문제를 바라보는 관점을 달리하는 것이 유용하며 이런 관점도 있구나를 살펴보고 가는 것이다. 따라서 본문의 예시에서 이해되지 않는 부분이 있더라도 큰 그림을 위주로 읽기를 권한다. 컴퓨터의 성능을 높이는 방법은 간단하다. 더 좋은 컴퓨터를 사면 된다. 예를 들어, 우리나라 기상청에서는 정밀한 날씨 예측을 위해 슈퍼컴퓨터를 보유하고 있다. 1초에 무려 5경2천900조번 연산이 가능하다. 그러면 해당 컴퓨터의 가격은 얼마일까? 더 성능이 좋은 컴퓨터를 구매하는 것.. 2024. 4. 24. [한 권으로 읽는 컴퓨터 구조와 프로그래밍] 10. 웹 브라우저를 활용한 프로그래밍 웹 브라우저를 활용한 프로그래밍을 살펴보기에 앞서서, 웹 브라우저를 활용하지 않고 프로그래밍을 하게 되면 어떤 과정을 거쳐야하는지를 살펴볼 것이다. 시스템 프로그램의 빌드 과정 보통 시스템 프로그램은 운영 체제에 딸려오는 가벼운 유틸리티나 프로그램 개발에 도움이 되는 컴파일러등을 가리킨다. 이런 프로그램을 개발할 때는 시스템의 기능을 최대한 활용해야하기 때문에 고수준의 언어 중에서도 좀 더 기계에 가까운 C나 C++등의 언어를 사용한다. C언어에서 개발 과정 중에서 직접 메모리를 할당하는 malloc이라는 함수를 사용할 만큼 기계에 가깝다. 또한 메모리의 주소값을 저장하기 위해 포인터라는 개념또한 빈번하게 등장한다. 컴파일러 언어인 C로 개발된 프로그램.. 2024. 4. 23. [한 권으로 읽는 컴퓨터 구조와 프로그래밍] 9. 웹브라우저 최초의 웹브라우저 최초의 웹브라우저는 간단했다. 브라우저는 URL을 사용해 서버에게 문서를 요청하면, 서버는 문서를 브라우저에게 보내고, 브라우저는 문서를 표시했다. URL에는 어떤 정보가 포함되어 있어서 문서를 요청할 수 있는 것일까? https://www.example.com/path/to/myfile.html 스킴 호스트 경로 https www.example.com path/to/myfile.html 먼저 https는 통신 메커니즘 (프로토콜)을 표시하는 스킴이다. 데이터를 주고받을 때, 어떤 규칙에 맞춰서 데이터를 송수신할지를 명시하고 있다. 예를 들어 https는 암호화 (secure) 사용해서 하이퍼텍스트를 전송하는 프로토콜이다. www.example.com 은 도메인 네임으로, 어느 웹 서버.. 2024. 4. 17. [한 권으로 읽는 컴퓨터 구조와 프로그래밍] 8. 컴퓨터의 프로그래밍 언어 처리 어셈블리어 컴퓨터는 기호로써 0과 1을 사용한다. 그렇기 때문에 프로그래머들은 0과 1을 조합해서 컴퓨터에게 명령을 내려야했다. 하지만 사람이 0과 1로 이루어진 비트 조합을 외워서 프로그램을 짜기란 쉽지 않았다. 그래서 비트 조합을 대신할 수 있는 이름을 붙이기 시작했다. 예를 들어 메모리에서 데이터를 가져오는 001에는 LOAD, 메모리에 데이터를 저장하는 010에는 STORE라는 이름을 붙여주는 식으로 말이다. 이것이 바로 어셈블리어다. 어셈블리어는 기계어와 달리 주소에 이름도 붙일 수 있었고, 코드에 주석을 달 수도 있었다. 고수준 언어 어셈블리어는 기계어보다는 편리했지만, 여전히 간단한 일을 하기 위해서도 여러 줄의 코드가 필요했다. #include void main() { int a = 10,.. 2024. 4. 16. [한 권으로 읽는 컴퓨터 구조와 프로그래밍] 5. 컴퓨터 아키텍처 컴퓨터 아키텍처 컴퓨터 아키텍처란 컴퓨터의 여러 구성요소를 배치하는 방법을 뜻한다. 가장 흔한 컴퓨터 아키텍처로는 폰노이만 구조와 하버드 구조가 있다. 이전에는 미리 정한 기능만을 수행하는 하드웨어를 만들어서 사용했기 때문에 다른 프로그램을 수행하기 위해서는 하드웨어 자체를 변경해야했다. 하지만 메모리 상에 프로그램의 명령어와 데이터를 올리고 CPU에서 연산을 처리하는 폰노이만 구조는 소프트웨어만 변경하더라도 다른 프로그램들의 실행이 가능하도록 만들었다. 하버드구조는 이와 비슷하지만 메모리 상에서 명령어와 데이터 영역을 구분하여 사용한다. 시간이 흐르면서, 컴퓨터의 성능을 개선하기 위해 여러 CPU를 사용하는 멀티 프로세서 시스템이 등장했다. 그리고 이후에는 한 발 더 나아가, 하나의 프로.. 2024. 3. 21. 이전 1 2 3 4 5 6 7 다음