본문 바로가기

반응형

Programming

(46)
[백준 ACM craft] 위상정렬 문제 https://www.acmicpc.net/problem/1005 1005번: ACM Craft 첫째 줄에는 테스트케이스의 개수 T가 주어진다. 각 테스트 케이스는 다음과 같이 주어진다. 첫째 줄에 건물의 개수 N 과 건물간의 건설순서규칙의 총 개수 K이 주어진다. (건물의 번호는 1번부터 N번까지 존재한다) 둘째 줄에는 각 건물당 건설에 걸리는 시간 D가 공백을 사이로 주어진다. 셋째 줄부터 K+2줄까지 건설순서 X Y가 주어진다. (이는 건물 X를 지은 다음에 건물 Y를 짓는 것이 가능하다는 의미이다) 마지막 줄에는 백준이가 승리하기 위해 건 www.acmicpc.net ACM craft라고 starcraft 문제를 비유한 듯한 문제다. 위상정렬문제이지만 단순 위상정렬문제가 아니라 각각의 건물이 지어..
[백준 A/B] double 출력 자릿수 문제 https://www.acmicpc.net/problem/1008 1008번: A/B 두 정수 A와 B를 입력받은 다음, A/B를 출력하는 프로그램을 작성하시오. www.acmicpc.net 브론즈 문제이지만 이런 문제일 수록 어이없게 틀릴 수가 있다. 문제 조건에는 "실제 정답과 출력값의 절대오차 또는 상대오차가 10-9 이하이면 정답이다." 라는 말이 있다. 즉, 정답과 상관없이 출력되는 값이 10의-9승 까지는 나오는 것이 오차를 줄일 수 있는 방법이다. 문제는 매우 단순하지만 문제의 정답처리 방식때문에 다음과 같이 소스코드를 작성하면 오답이나온다. #include using namespace std; int main() { double a, b,c; scanf("%lf %lf", &a, &b); ..
[백준 알파벳] DFS, BackTracking 문제 https://www.acmicpc.net/problem/1987 1987번: 알파벳 문제 세로 R칸, 가로 C칸으로 된 표 모양의 보드가 있다. 보드의 각 칸에는 대문자 알파벳이 하나씩 적혀 있고, 좌측 상단 칸 (1행 1열) 에는 말이 놓여 있다. 말은 상하좌우로 인접한 네 칸 중의 한 칸으로 이동할 수 있는데, 새로 이동한 칸에 적혀 있는 알파벳은 지금까지 지나온 모든 칸에 적혀 있는 알파벳과는 달라야 한다. 즉, 같은 알파벳이 적힌 칸을 두 번 지날 수 없다. 좌측 상단에서 시작해서, 말이 최대한 몇 칸을 지날 수 있는지를 구하는 www.acmicpc.net 배운점 1. 중복검사는 visited[i]로 하고, backtraking 해서 올라올 때, visited가 제대로 업데이트 되는지 확인. 2..
[백준 N과 M(1)] 백트래킹 문제 https://www.acmicpc.net/problem/15649 15649번: N과 M (1) 한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해야 한다. www.acmicpc.net 배운점 : 1. BackTracking 문제는 깊어진 depth 에서 다시 빠져나올 때도 생각해야한다. 2. 중복검사는 visited[i]로 하는게 빠르다. ( 다이나믹 프로그래밍) for문으로 일일이 중복되는지 확인하지 말자. 3. 코딩하면서 변수가 코드로써 뭘 의미하는지도 적어놓고 하면 생각이 편하다. ex) depth는 tree의 깊이(개념)이자 arr의 인덱스 역할(코드로써의 의..
코드 가독성 향상을 위한 팁 1. 함수화 - 계층적으로 소스 짜기 - 하나의 함수 안에는 하나의 내용만. (함수 내용은 일관성 있게) - 함수의 모듈화. 다른 프로젝트의 함수를 옮겨와도 사용할 수 있게 전역변수 의존도를 낮추자. ★ 2. 내용이 있어야할 곳에 있는것 실제로 소스를 짜다보면 잘 안지켜지는 것중 하나이다. 1) 변수 자체가 있어야 할 곳에 있어야 하는 경우. loop 변수 초기화는 loop 바로 위에서 해준다. (중요한 것은 loop 와 떨어져있으면 가독성이 떨어진다는 것.) 만약 변수 초기화가 loop 보다 10줄 위에서 실행됐다면 남이 봤을 때 왜 사용된것인지 몰라 당황스러울 수 있다. 2) 내용 자체가 있어야 할 곳에 있어야 하는 경우. 인턴 일을 하다가 전에 일을 하던 인턴이 짜놓고 간 소스코드를 보고서 이상한 ..
백준 토마토문제 https://www.acmicpc.net/problem/7576 7576번: 토마토 첫 줄에는 상자의 크기를 나타내는 두 정수 M,N이 주어진다. M은 상자의 가로 칸의 수, N은 상자의 세로 칸의 수를 나타낸다. 단, 2 ≤ M,N ≤ 1,000 이다. 둘째 줄부터는 하나의 상자에 저장된 토마토들의 정보가 주어진다. 즉, 둘째 줄부터 N개의 줄에는 상자에 담긴 토마토의 정보가 주어진다. 하나의 줄에는 상자 가로줄에 들어있는 토마토의 상태가 M개의 정수로 주어진다. 정수 1은 익은 토마토, 정수 0은 익지 않은 토마토, 정수 -1은 토마 www.acmicpc.net 문제는 토마토상자에 토마토가 있을때 하루가 지날수록 토마토는 주변 토마토를 익힐수 있다. 이 때 4방향 이웃을 익히는데 익힐수 있는 모든 ..
[C/C++, 시간측정법]C언어(visual studio) 시간측정법 while문이나 전체 소스 실행시간을 측정하고 싶을 때가 있다. 나는 whlie문이 몇 msec마다 실행되는지를 확인하고 싶었는데 다음과 같이 확인 할 수 있다. 1) 시간을 딱 한번 만 측정하는 경우 #include #include using namespace std; int main() { clock_t start; int testCase; int num; cin >> num;// 입력 start = clock();// 시간 재기 시작 cout
[C/C++]C언어 소스 최적화(시간효율, 메모리효율성 증대) 블로그 링크 첨부합니다. https://modoocode.com/129 씹어먹는 C 언어 - 이번 강좌에서는 C 언어 코드의 최적화 기법에 대해 살펴본다.안녕하세요 여러분~ 이제 저의 마지막 강의(총 41 강)가 되겠네요. 그럼, 오늘도 강의를 시작해 볼까요?우리의 컴퓨터는 무한정 빠르지 않습니다. 따라서 동일한 작업을 시키더라도 어떠한 방식으로 시키냐에 따라서 그 속도가 엄청나게 차이가 나게 됩니다. 우리는 언제나 코드를 만들 때 '과연 어떻게 해야지 이 작업을 가장 빠르게 할 수 있도록 코드를 만들 수 있을까?' 를 고민 해야 합니다. 이렇게 modoocode.com

반응형