본문 바로가기

Algorithm

(71)
백준 기록-5 일단 0x03강 문제들을 다 풀어봤다. 알고리즘은 나에겐 너무 어렵고 복잡하게만 느껴진다. 그래도 stl container에 대해서 조금씩 숙련도가 쌓여가는 것 같다.
백준 / 바킹독님의 문제집 / AC(5430) 문제 설명 문제 해결 처음에 문제 설명 그대로 입력을 받아서 함수조합 문자열을 받고 일일히 함수를 실행하는 코드를 작성했다. 채점한 결과, 시간 초과가 빈번히 발생했다. 실행 시간을 줄일 수 있는 방법이 없을까 고민해봤다. 반드시 배열을 뒤집은 결과를 일일히 적용시켜야할까? 배열이 뒤집힌 상태 여부만 기억해두고, 맨 앞, 맨 뒤에 있는 원소만 빼줘도 되는 것은 아닐까? 이런 생각이 들었다. #include #include #include using namespace std; int main(int argc, char* argv[]) { // T 입력 int T; cin >> T; // AC 프로그램 실행 while (T--) { // p 입력 string p; cin >> p; // n 입력 int n;..
백준 기록-4 스택 수열, 회전하는 큐, AC 문제가 어렵다. 시간 초과가 많이 나온다. python처럼 split, join 같은 문자열 조합 함수가 없어서 C++에 적응하는데 불편함을 느낀다. 빨리 풀고 다음 강의로 넘어가야겠다.
백준 기록-3 문제를 다 풀었지만 아직도 STL Container(vector, queue, list)를 잘 활용하기 힘들다. 블로그 포스트를 보는데 cache hit rate 이야기가 나왔다. 관련 자료를 살펴보니 이해하는데 시간이 걸릴 듯하다. 백준에 solved.ac라는 알고리즘에 등급을 매겨주는 시스템이 존재했다. 악성코드 분석을 빠르게 마치고 자료구조, 알고리즘에 대해서 학습하고 익혀야겠다. (롤도 골드인 내가 알고리즘에서는 브론즈라니..)
백준 기록-2 2강에 있는 문자열, 배열 관련 문제들을 풀어봤다. 연결 리스트 공부를 빠르게 마치고 관련 공부를 쭉 진행해야겠다.
백준 기록-1 1강에 있는 문제들을 어느정도 풀어봤다. C++ 적응을 위해서 풀어봤는데, 확실히 이제 손에 감이 잡히는 느낌이다. 별찍기는 시간 관계상 일단 스킵하고 2강의 문제들로 넘어갈 예정이다.
정수 오버플로, 실수 계산 유의점 정수 오버플로(Integer Overflow) 정수 오버플로(Integer Overflow)는 C언어 입문서에서도 자주 다루므로 익숙하다. #include using namespace std; int main() { char a = 127; char b = -128; printf("a : %d b : %d\n", a, b); a += 1; b -= 1; printf("a : %d b : %d\n", a, b); return 0; } 각 자료형마다 표현할 수 있는 수의 범위에는 한계가 존재한다. 그 한계를 넘어가면 정수 오버플로가 발생한다. 그러므로 각 자료형이 수를 어디까지 표현할 수 있는지 생각해보고 연산해줘야 한다. 실수 계산 (0.1 + 0.1 + 0.1) == 3은 True를 반환할까? #incl..
알고리즘 공부 자료 매우 부족한 지식으로 알고리즘 문제를 꾸역꾸역 해결해가면서 알고리즘, 자료구조에 대한 공부가 부족하다고 느꼈다. 지인에게 공부 자료를 추천해달라고 요청했고 해당 자료를 소개해줬다. (리버스 엔지니어링에 IDA를 올려놓은 것처럼 해당 자료를 읽으면 알고리즘이 접근하기 용이해질 것이라고 했다.) [실전 알고리즘] 0x00강 - 오리엔테이션 안녕하세요, 바킹독입니다. 리뉴얼을 완료해서 다시 강의를 올립니다. 혹시 코딩테스트를 대비하고자 하는 목적으로 검색하다가 이 강좌를 보게 된거라면 지금 이 강좌가 정말 큰 도움이 된다 blog.encrypted.gg 그나마 해시, 스택, 큐 쪽으로는 조금이라도 버티면서 문제 풀이 방법을 이해하고 흉내내고 있지만 완전탐색, 탐욕법, 동적계획법 등 처음으로 접근해보는 문제 영..
프로그래머스 / 코딩 테스트 / 최솟값 만들기 문제 설명 문제 해결 하나의 리스트는 오름차순, 또다른 리스트는 내림차순 정렬하여 누적시켜주면된다. (수학적으로 왜 그런지 증명할 지식이 없다..) def solve(A,B): return sum([i * j for i, j in zip(sorted(A),sorted(B,reverse=True))]) def solution(A,B): answer = solve(A,B) return answer
프로그래머스 / 코딩 테스트 / 이진 변환 반복하기 문제 설명 문제 해결 입력으로 준 문자열이 '1'이 될 때까지 커스텀으로 정의된 이진변환 행위를 반복하는 프로그램을 만들면된다. def bin_str(s): s = s.replace('0','') s = bin(len(s))[2:] return s def solve(s): res = [0,0] while s != '1': res[1] += s.count('0') res[0] += 1 s = bin_str(s) return res def solution(s): answer = solve(s) return answer