만족은 하되 안주하지는 말자

기록해야 기억한다

프로그래밍/programmers&bj 78

[C++][알고리즘] 프로그래머스:: 정수 삼각형

https://programmers.co.kr/learn/courses/30/lessons/43105 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr stack 을 이용한 DFS 형식으로 풀려고 하다가 망해버린 문제이다. 커닝을 스을쩍 한뒤 풀은 문제. 다음에 기회되면, 망각이 될 때쯤 다시 풀어야 할 듯. 생각보다 간단한데,, 혼자 복잡하게 생각했다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 #includ..

[C++][알고리즘] 프로그래머스:: 2 x n 타일링

https://programmers.co.kr/learn/courses/30/lessons/12900 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제해설 규칙성을 찾는게 중요한 문제같습니다. 타일의 세로길이는 신경쓸 필요없으니 가로길이만 따진다 봤을 때 길이가 4인 타일 종류의 경우 1 1 1 1 1 2 1 1 1 2 2 1 1 2 2 이렇게 5가지인데, 배열로 생각하면 tile[맞춰야 하는 길이 n] = (경우의수) tile[1] = 1 tile[2] = 2 tile[3] = 3 tile[4] = 5 tile[5] = 8 ... 이런식으로 피보나치수..

[C++][알고리즘] 프로그래머스:: N으로 표현

https://programmers.co.kr/learn/courses/30/lessons/42895 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 동적계획법 관련 문제. 나는 DFS 활용하여 문제를 풀었따. 다른사람 답을 참고하고 풀었기에 나중에 다시생각하고 풀어볼 필요가 있다. unordered_set 을 활용한 풀이방법이 좋아요가 가장 많았다. 나중에 알아보도록 하자.

[C++][알고리즘] 백준 18808번 스티커 붙이기

https://www.acmicpc.net/problem/18808 18808번: 스티커 붙이기 혜윤이는 최근에 다양한 대회를 참여하면서 노트북에 붙일 수 있는 스티커들을 많이 받았다. 스티커는 아래와 같이 사각 모눈종이 위에 인쇄되어 있으며, 스티커의 각 칸은 상하좌우로 모두 연결되어 있다. 또한 모눈종이의 크기는 스티커의 크기에 꼭 맞아서, 상하좌우에 스티커가 포함되지 않는 불필요한 행이나 열이 존재하지 않는다. 아래는 올바른 모눈종이의 예시이다. 주황색 칸은 스티커가 붙은 칸을, 하얀색 칸은 스티커가 붙지 않은 칸을 나타낸다. 반면 아래는 올바 www.acmicpc.net 최근 baaarking dog 님께서 주도하시고 만드신 삼성 코딩테스트 모의고사 문제를 풀어보았다. 2개의 문제중 1개만 풀게 ..

[C++][알고리즘] 프로그래머스:: 타일장식물

피보나치 & 메모이제이션(DP) 피보나치 수열로 생기는 타일 도형의 사각형 둘레를 계산하면 된다. 피보나치 수열의 범위가 80까지 이므로 메모이제이션을 활용하지 않으면 시간초과가 뜰것이라 생각해서 메모이제이션을 활용하여 문제를 풀었다. 후기 다른사람 풀이보니까.. 진짜 똑똑한 사람들 많구나 싶다. 10줄이내로 해결이 되네...

[C++][SWEA] 1204. 최빈수 구하기

기본에 충실한 문제. 푸는 방법은 여러가지가 있겠으나 input에 각 학생의 점수가 주어지고 점수는 0~100 이므로 size 101짜리 배열을 0으로 초기화 한뒤 점수를 입력받을때마다 array[점수] 값을 1만큼 increment 해주는 식으로 해당 점수를 맞은 사람의 수를 세었다. algorithm 헤더에 포함되어있는 max_element(pointer_begin,pointer_end) 로 가장 큰 원소의 "위치" 를 파악 한 뒤 배열의 100점부터 0점까지 거꾸로 해당 maxval 과 같은 점수를 출력하는 방식을 취했다. 만약 100점이 5명으로 제일 많고 95점도 5명이라면 100점을 출력해야하는 조건이 있기 때문에, 100점부터 내림차순으로 찾게 되면 해당 조건을 무조건 만족하기 때문이다. 왜..

[C++][SWEA] 1206. View

느낀바 처음엔 만약 3번째 위치 빌딩의 높이가 5이면 building[2][] = 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 ... 이런식으로 해서 하려고 했는데 굉장히 무식한 방법인 것이었다. 조망권이 있는다라는 것은 i번째 빌딩의 높이가 250 이면 i-2,i-1,i+1,i+2 번째 빌딩보다 얼마나 "최소한" 높은지를 계산하면 되는 것이었다... 만약 i번째빌딩이 위 4개 빌딩보다 높다면 자연스럽게 i-2,i-1,i+1,i+2 번째 빌딩은 높이가 어떻든간에 i번째 빌딩보다 낮은 것이므로 계산할 필요도 없다. 위 코드엔 이 부분은 포함되지 않았지만 실행시간을 자연스레 더 줄일 수 있겠다 싶다. 아마 스트레스 테스트가 있는 문제라면 이것도 생각해야할 듯 싶다.