전체 글 25

컴퓨터의 실수 표기방법(부동소수점 표기법) + 컴퓨터의 실수 표기 오차 이유

오늘은 컴퓨터가 실수를 저장하는 방법인 부동소수점 표기법에 대해 알아보고자 한다. 현재 웹사이트의 개발자도구를 통해서 다음과 같은 코드를 console에 적어서 결과값을 확인해보자 0.1 + 1.1 == 1.2 이상하게도 false라는 결과값이 나올 것이다. 사람이 보았을때 서로 같은 값이지만 컴퓨터는 서로 다른 값으로 인식된다. 이는 컴퓨터의 부동소수점 표기방법에 관련이 있다. 이를 알기전에는 2진수에 관련된 지식이 있어야한다. 컴퓨터가 정수를 저장하는 방법으로 굉장히 쉽고 재밌는 지식이니 한번 알아보길 바란다. 2진수를 알고있다는 가정하에 진행을 하도록 하겠다. 5.125 를 우리가 알고있는 이진수로 변환하면 어떻게 될까? 101.001 다음과 같이 변하게 될 것이다. 이를 그대로 컴퓨터에 저장을 해..

CS 2022.12.29

[ubuntu] Error 0x80370102

ubuntu를 설치하고 ubuntu를 들어가서 또 다시 설치한다더니 제목과 같은 error가 발생하였다 혹시나 다음에 또 똑같은 에러가 뜰수도있을까 싶어 글을 써본다. 검색창에 windows 기능 켜기/끄기를 치거나 제어판 -> 프로그램 -> windows 기능 켜기/끄기를 들어가면 밑의 사진이 뜬다. 그후 - linux용 windows 하위 시스템 - 가상머신 플랫폼 - windows 하이퍼바이저 플랫폼 이들을 check 한후 재부팅을하니 error가 뜨지않았다.

linux/ubuntu 2022.09.22

visual studio code c++ 개발환경설정 2: vscode 설정

이번 시간에는 저번시간 컴파일러 설치에 이어 c++ 개발환경설정을 위해 vscode를 설정해보겠습니다. 먼저 vscode extension을 설치해보겠습니다. vscode에 들어오셔서 맨왼쪽 이런 아이콘을 누르고 검색창에 c++이라고 치시면 다양한 extension들이 나옵니다. 여기서 C/C++ C/C++ Extension Pack C++ Intellisense C/C++ Theme 정도 설치해주시면 됩니다. 참고로 vscode 한국어 번역을 원하시면 검색창에 korean 치시고 Korean(사용법) Language Pack for Visual Studio Code 설치해주시면됩니다. 그리고 이제 vscode를 설정해주기 전에 파일을 생성해야합니다. 원하시는 곳 아무데나 폴더를 만들어서 vscode 파..

vscode 2022.04.14

visual studio code c++ 개발환경설정 1: MingGW(컴파일러) 설치하기

저는 원래 예전부터 c++로 문제풀이를 할때 계속 visual studio를 쓰다가 visual studio 프로그램 자체가 너무 크다 보니 텍스트 편집기로 바꿔야겠다라는 생각에 찾아보았습니다. 그러다 다른 언어들로는 visual studio code로 쓰고 있어서 visual studio code로 바꿔야겠다는 생각을 해서 c++ IDE를 visual studio code로 바꿔보았습니다. 그리고 제가 경험했던 것들을 이 visual studio code c++ 개발환경설정이라는 제목으로 순서대로 제가 어떻게 하였는지 알려드릴까합니다. 일단 저의 조건은 운영체제 64bit windows를 사용하고 있습니다. 처음으로는 visual studio code에는 따로 컴파일러가 없기 때문에 컴파일러를 설치해야..

vscode 2022.04.13

[백준/BOJ] 1654 - 랜선 자르기 (c++) (이분탐색)

1. 문제 https://www.acmicpc.net/problem/1654 2. 풀이 이 문제는 답을 이분탐색을 이용하여 구하는 문제이다. 답은 1부터 2^31 - 1사이에 존재한다. 따라서 이 사이의 값 중 답이 되는 값중에 최댓값을 구하기 위해 이분탐색을 사용하면 된다. 또 다른 주의할점은 이분탐색을 할때 mid값을 구할때 m = (l + r) / 2인데 l이 1이고, r이 2^31 - 1이어서 더하게 되면 int형 사이즈를 초과하기때문에 l, r, m을 long long 형으로 변환시켜줘야한다. 3. 소스코드 #include #include using namespace std; int n, k, arr[10000]; bool makeN(int m) { int line = 0; for (int i ..

[백준/BOJ] 2579 - 계단 오르기 (c++) (DP)

1. 문제 https://www.acmicpc.net/problem/2579 2. 풀이 이 문제는 DP를 이용해 푸는문제이다. dp[i]는 i번째 계단은 밟고, 1부터 i번째까지 최대의 수이다. 즉 dp[i]는 그 바로 전단계의 계단을 밟은 여부에 따라 바뀌는 것이다. (시작) dp[0] = 0 dp[1] = arr[1] dp[2] = arr[1] +arr[2] (3≤i≤n) dp[i] = max(dp[i-2] + arr[i], dp[i-3] + arr[i-1] +arr[i])이다. cf) https://zcacoding.tistory.com/20 [백준/BOJ] 2156 - 포도주 시식 (c++) (DP) 1. 문제 https://www.acmicpc.net/problem/2156 2. 풀이 이 문제는..

[백준/BOJ] 1932 - 정수 삼각형 (c++) (DP)

1. 문제 https://www.acmicpc.net/problem/1932 2. 풀이 이 문제는 DP를 이용하여 푸는 문제이다. 이번 dp배열은 2차원 배열을 사용할 것이다. 점화식부터 살펴보자면 초기값: dp[0][0] = tri[0][0] (j=0) dp[i][j] = dp[i-1][j] + tri[i][j] (j=i-1) dp[i][j] = dp[i-1][j-1] + tri[i][j] (1≤j≤i-2) dp[i][j] = max(dp[i-1][j-1], dp[i-1][j]) + tri[i][j] 이다. dp는 위에서부터 최대값을 구할 것이다. 자기자신의 위에 있는 왼쪽, 오른쪽 중 dp값의 더 큰 값을 구해 자기자신(tri[i][j])의 값과 더하면 dp[i][j]가 만들어지는 것이다. 하지만 맨..

[백준/BOJ] 9461 - 파도반 수열 (c++) (DP)

1. 문제 https://www.acmicpc.net/problem/9461 2. 풀이 문제에서 P(1)부터 P(10)까지 첫 10개 숫자는 1, 1, 1, 2, 2, 3, 4, 5, 7, 9 이라고 하였다. 위의 수열을 보면 P(i) = P(i-2) + P(i-3)이라는 것을 알 수 있다. 이를 통해 코딩을 하면된다. 3. 소스코드 #include using namespace std; int t, n, mxn = 3; long long dp[101]; int main() { ios::sync_with_stdio(0); cin.tie(), cout.tie(); dp[1] = dp[2] = dp[3] = 1; cin >> t; while (t--) { cin >> n; if (mxn < n) { for (..

[백준/BOJ] 2156 - 포도주 시식 (c++) (DP)

1. 문제 https://www.acmicpc.net/problem/2156 2. 풀이 이 문제는 DP를 이용하여 푸는 문제이다. 중요한점은 dp[i]를 i번째 포도주(자기자신)을 먹은 여부에 따라 설정하는 것이다. 일단 첫번째로 i번째 포도주(자기자신)을 먹었다고 한다면 i번째 포도주(자기자신)을 먹었기 때문에 i-1번째 포도주를 안 먹었다면 dp[i] = dp[i-2] + arr[i]이다. i-1번째 포도주를 먹었다면 dp[i] = dp[i-3] + arr[i-1] + arr[i]이다. 두번째로 i번째 포도주(자기자신)를 안먹었다고한다면 i-1번째 포도주를 먹든 안먹든 상관이 없어지기 때문에 dp[i]는 dp[i-1]이게 된다. 즉 dp[0] = 0, dp[1] = arr[1], dp[2] = dp[..

[백준/BOJ] 10844 - 쉬운 계단 수 (c++) (DP)

https://www.acmicpc.net/problem/10844 10844번: 쉬운 계단 수 첫째 줄에 정답을 1,000,000,000으로 나눈 나머지를 출력한다. www.acmicpc.net 위의 문제는 계단수의 성질와 DP를 이용하여 푸는 문제입니다. 맨 앞자리는 0이 오지못한다는 주의할 점도 있습니다. 맨뒷자리에 따라 뒤에 올 수 있는 수가 정해져있습니다. 맨 뒷자리가 0: 1, 1: 0, 2, 2: 1, 3, ... 8: 7, 9, 9: 8 이렇게 됩니다. 즉 인접하는 수의 전단계 계단수를 더하면 현재의 계단수를 구할 수 있게되는것입니다. 점화식으로 작성해보자면 dp[i][j]: 길이가 i이고 마지막 수가 j인 계단수의 개수 j=0 이면 dp[i][0] = dp[i-1][1] j=9 이면 dp..