전체 글

·CS
영어 공부겸 Medium의 개발 블로그를 탐방하던 도중에 이런 포스트를 찾았습니다.그리고 최근 개발 커뮤니티의 cs 질문 게시판에서 비슷한 주제의 질문을 보게됐는데요." 이 코드는 왜 false가 나올까요? "console.log(0.1 + 0.2 === 0.3); 먼저 떠오른 대답은 "컴퓨터는 실수를 정확하게 저장할 수 없다." 였습니다.하지만 연쇄적으로 떠오른 "그럼 왜 정확히 저장할 수 없나요?"라는 질문에는 정확히 대답을 할 수 없었습니다. 그래서 이렇게 된 김에 제대로 정리해보려고 합니다.사전지식. 컴퓨터가 소수점 아래를 저장하고 사용하는 방법컴퓨터는 모든 데이터를 2진수, 즉 bit를 사용해 저장하고 사용합니다. 그리고 이건 실수를 다룰 때도 마찬가지입니다.따라서 컴퓨터는 소수점 아래를 다음 ..
·백준
https://www.acmicpc.net/problem/1259문제 간단 요약입력된 정수가 팰린드롬이면 "yes", 아니면 "no" 출력 문제 해석간단한 구현문제로, 결국 좌/우를 확인하는 문제 문제풀이투 포인터, StringBuilder의 reverse() 내장함수 같은 다른 방법도 있지만좌/우가 한 쌍을 이루는지 확인하는 점에서 스택을 이용해서 풀기로 결정스택에 입력받은 문자열의 절반을 push한다.절반 이후부터는 스택의 top과 비교하며 같으면 pop, 아니면 반복문 탈출을 한다.위 과정이 진행된 후 스택이 비어있으면 입력된 수는 팰린드롬이다.막힌 부분가운데 수 처리홀수인 경우, 가운데 수는 짝을 이루지 않아도 팰린드롬이다.해결방법홀수인 경우, 한 칸 더 움직인 후 top과의 비교를 시작하는 것으..
·백준
백준 15829 문제 간단 요약영어 소문자로 된 문자열이 주어졌을 때,해당 문자열을 해시함수에 넣어서 생성된 해시값을 출력하라.문제 해석문제를 잘 이해했는지 확인하는 구현 문제해사함수에 대해 공부해봤으면 하는 출제자의 의도와 노력이 보인다.문제 풀이각 자리의 소문자를 정수(1~26)으로 치환한다.각 자리에 해당하는 만큼 r(31)을 거듭제곱한 후 치환한 값에 곱한다.M(1234567891)으로 나머지 연산을 한다.막힌 부분 : 50점r^i(31^i)는 거듭제곱이기 때문에, L이 클 때 굉장히 커진다.이거 어떻게 처리할지?해결방법내가 해결한 방법r에 31을 곱할 때마다 M을 사용한 나머지 연산을 통해 범위를 줄인다.추가 문제 : 나머지 연산을 통해 범위를 줄여도 M은 약 12억   ➡  a의 값이 2이상이..
·백준
https://www.acmicpc.net/problem/9935 접근방법스택 문제이기 때문에 Stack클래스를 사용하는 방향으로 문제에 접근했다.스택에 입력된 문자열의 문자를 하나씩 넣기넣을 때마다 조건 확인조건 : 폭발 문자열의 마지막 글자와 같은지, 스택이 폭발 문자열의 길이보다 긴지 조건에 맞는다면 폭발 문자열인지 확인맞다면 폭발 문자열을 스택에서 제거아니라면 제거하지 않고 1번으로 돌아가기 참고사항 N : 입력 문자열의 길이M : 폭발 문자열의 길이1차 시도 : Stack 사용 - O(N*M)결과 : 시간초과import java.util.Scanner;import java.util.Stack;public class Main { public static void main(String[] ar..
·백준
N과 M을 둘다 int로 선언하면 안되는 이유문제에서 설정한 N과 M의 범위는 [-2,000,000,000 ≤ N, M ≤ 2,000,000,000]즉, int의 범위에 속한다. 하지만 주의해야 할 점은, N과 M이 사칙연산을 한다는 점이다.+,- 연산으로 인해 -40억,+40억과 같은 int의 범위를 초과한 연산결과가 나올 수 있다는 소리다. 하지만, 문뜩 나는 이런 궁금증이 생겼다.어차피 변수 N, M에 저장된 값은 변하지 않을텐데 왜 int로 하면 안되지? 결과값만 long으로 저장하면 안되나?Math.abs에서 N-M을 알아서 long으로 봐줄 수는 없나?Math.abs함수의 동작 방식 뭐지?그래서 구글링한 결과 N과 M을 둘다 int로 선언하면 안되는 2가지의 구체적인 이유를 찾았다.첫째, N과..
·독서 후기
왜 읽게 됐는지 - 게으름 중독5개월의 기숙 교육이 끝나고 서울로 올라왔다. 기숙을 하면서는 하루 평균 10시간은 빼먹지 않고 매일 공부했었는데, 올라오자마자 과거로 회귀했다. 빈둥이가 됐다는 말이다. 해야 할 일들은 미루고 계획은 세우지도 않고, 하고 싶은 것들만 하는 생활을 시작했다. 집에서 먹고, 자고, 놀고를 반복하는 게으른 생활이었다. 그런 생활이 1주일이 넘어갈 때쯤, 하도 앉고 누워있다 보니 허리가 아파왔다. 그리고 그때 처음으로 이런 생각이 들었다."아 이건 좀 아닌데" 마치 알콜 중독처럼 게으름에 중독되어 건강이 나빠지는 기분이었다. '게으름 중독' 현재 내 상태를 가장 잘 나타내는 말이다. 그리고 내가 아는 상식선에서 무엇이든 중독된 사람의 삶은 그리 행복하지는 않다.  지금까지 부지런..
·CS
기본적인 개념좋은 설계를 위한 객채 지향 원칙 묶음이다. 그저 원칙이기 때문에 OOP(객체 지향 프로그래밍)을 지원하는 모든 언어에 원칙을 적용 가능하다. 각 원칙은 따로 적용해야 하는 순서는 없고, 서로 다른 문제를 해결하기 위해 만든 원칙이기 때문에 문제가 없다면 원칙을 억지로 적용할 이유도 없다.좋은 설계란?코드를 확장하고, 유지보수 관리하기 쉬운 구조복잡성을 제거해 가독성이 좋고, 리팩토링이 쉬운 구조그럼으로, 새로운 요구사항이나 변경사항이 있을 때 영향을 받는 범위가 적고, 개발 생산성이 높은 구조(좋은 설계란 이야기할 거리가 많은 주제입니다. 위 내용을 좋은 설계에 대한 개인적인 의견으로 받아들여 주시면 감사하겠습니다.)SRP (Single Responsibility Principle) - 단..
·SW 정글 일지
진짜 드럽게 힘들었던 핀토스 주차가 끝나간다... 지금까지 프로젝트를 하면서 느꼈던 것들을 마구잡이로 내뱉으며 이번 프로젝트를 마무리하려고 한다. 정신이 나가있어서 무슨 글을 쓸지는 나조차 모르고, 나중에 보면 이불킥을 갈길지도 모르지만 일단 써보자..!범부가장 처음 프로젝트를 진행하면서 느낀 건, 잘하는 사람들이 정말 많다는 것이다, 잘하는 사람들은 진짜 톡 튀어나온 것처럼 눈에 띄는 게 느껴졌다. 나는 그저 한낱 범부에 지나지 않다는 걸 새삼 느꼈다. ( 그래도 뭐 내가 하고 싶은 거니까 그것과는 상관없이 계속해야징 ㅎㅎ)디버그는 엉덩이로핀토스를 진행하면서(특히 프로젝트 3) 디버그에 가장 많은 시간을 보냈다. 디버그는 마치 엄마의 곰탕 같다... 처음에는 맛있지만 일주일 삼시세끼 내내 먹고 있으면 ..
forrest13
forrest