일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 메모리구조
- C 언어 코딩 도장
- JSON
- R
- Serialization
- buffer
- 윤성우 열혈자료구조
- stream
- 이스케이프 문자
- datastructure
- 알기쉬운 알고리즘
- coding test
- Stack
- Selection Sorting
- C programming
- 혼자 공부하는 C언어
- 윤성우의 열혈 자료구조
- s
- insertion sort
- list 컬렉션
- Algorithm
- 이것이 자바다
- Graph
- Today
- Total
목록Problem Solving (182)
Engineering Note
Link : https://www.acmicpc.net/problem/1018\](https://www.acmicpc.net/problem/1018) Note 문제에서 주어진 규칙을 어떻게 알고리즘으로 구현할 것인지 생각하면 된다. 직관적으로 생각해보기 위해서 4\*4일 때를 기준으로 먼저 생각해보고 크기를 생각해보았다. 여기서 좀 더 빠르게 구할 수 있는 규칙을 발견했다. 0행 0열이 W일 때와 B일 때로 나누어서 생각하지말고, W이든 B이든 0행 0열의 값을 기준으로 나머지 칸들이 문제에 주어진 규칙에 맞는지 모두 확인하고 다시 칠해야할 칸들의 수(CNT)를 구한다. 이때 구한 칸의 수는 달라질 수있다. 만약 0행 0열을 기준으로 두지 않고 0행 0열을 바꾸고 시작 했다면, 새로 칠해야 할 칸은 4\..

Link : https://www.acmicpc.net/problem/1913 Note 숫자 입력 방식에서 규칙이 없을지 직접해보면서 방향 전환에서 규칙을 발견했다. N이 3일 경우 1:(상, 우) 2:(하,하 좌,좌, 상,상) N이 5일 경우 1:(상, 우) 2:(하,하, 좌,좌) 3:(상,상,상, 우,우,우) 4:(하,하,하,하, 좌,좌,좌,좌, 상,상,상,상) N이 7일 경우 1:(상. 우) 2:(하,하, 좌,좌) 3:(상,상,상, 우,우,우) 4(하,하,하,하, 좌,좌,좌,좌) 5:(상,상,상,상,상, 우,우,우,우,우) 6:(하,하,하,하,하,하, 좌,좌,좌,좌,좌,좌, 상,상,상,상,상,상,상) 으로 변화한다. i가 1부터 N-2 까지는 증가할 때 방향회전 방식은 다음과 같다. 상,우,하,좌가..
Link : https://www.acmicpc.net/problem/2444 Note N에 대하여 1번째줄부터 N번째 줄까지는 다음과 같은 규칙을 갖는다. i 번째 줄은 " "(스페이스 공백)은 (N-i)개를 출력하고 "*"은 (2*i-1)개를 출력한다. 그리고 다시 N+1 부터는 N+N-1번째 줄까지는 다시 N+1 번째 줄을 새로운 첫 번째 줄이라고 생각할 때 j번째 줄은 " "(스페이스 공백)은 j번 출력하고 "*"를 (2*(N-1) -(2*j-1))을 출력한다. 예를 들면 N이 5일 때, 첫 번째줄 " "-4번, *-1번 두 번째줄 " "-3번, *-3번 세 번째줄 " "-2번, *-5번 네 번째줄 " "-1번, *-7번 다섯 번째줄 " "-0번, *-9번 여섯 번째줄 " "-1번, *-7번 (새..
Link : https://www.acmicpc.net/problem/1748 Note 1부터 주어진 숫자N까지 연속으로 썼을 때 자리수를 구하는 문제다. 규칙을 찾아 점화식을 세워서 풀었다. 19까지의 한 자리수를 추가할 때는 당연히 자리수도 하나씩 늘어나고 1099까지 두 자리의 수를 추가할때는 2자리가 늘어난다. 주어진 N이 4자리의 수 1200라는 수라면 999까지는 (9-1+1)*1 + (99 - 10 +1) * 2 + (999-100+1)*3 (1200-1000+1)*4로 자리수를 구할 수 있다. Code import sys input = sys.stdin.readline num = input().rstrip() n = len(num) num = int(num) total = 0 for i i..
Link : https://www.acmicpc.net/problem/1316 Note 첫 번째 풀이는 스택을 이용해서 풀이했다. 입력 된 문자를 선형 탐색하면서 연속적으로 같은 값이 나오면 스택에 넣어주고 다른 값이 나올 때 기존 스택을 비워주고 다시 스택에 넣는다. 이때 스택에 넣을 때 선형탐색에서 최초 등장 문자의 경우 등장여부를 체크한다. 그리고 다시 선형탐색하는데 이번 문자가 기존에 나왔던 문자라면 그룹단어가 아니다. 두 번째 풀이는 슬라이싱을 활용해서 풀이했다. 첫 번째와 마찬가지고 선형탐색하는데 현재 인덱스를 i라고 할 때 i번째 문자와 i+1번째 문자를 비교한다. 비교하면서 두 문자가 서로 다를 경우 i번 째 인덱스가 이후의 또 등장하는지 체크해서 등장하면 그룹문자가 아니다. Code im..
Link : https://www.acmicpc.net/problem/1475 Note 첫 번째 풀이 선형적으로 입력된 숫자 하나하나에 대해 사용된 플라스틱 숫자 개수를 카운트 해준다. 사용된 숫자 개수는 플라스틱 숫자를 꺼낸 박스의 번호를 의미한다. 박스는 1번부터 순서대로 사용한다. 단, 6, 9의 경우, 6일때는 9를 대신 사용할 수 있는지 9일 때는 6을 대신 사용할 수 있는지 체크해서 사용할 수 있다면 대체 숫자를 카운트해준다. 플라스틱 숫자 사용 개수가 가장 마지막의 사용한 박스번호라는 점을 이용하면 대체 숫자 사용여부를 체크할 수 있는데 현재 체크할 숫자가 6이라면 6번 숫자를 쓰기위해 최근에 사용한 박스번호와 9번숫자를 쓰기위해 최근에 사용한 박스번호를 비교해서 9를 위한 박스번호가 더 작..
Link : https://www.acmicpc.net/problem/2941 Note 오늘 프로그래머스 인턴 코딩테스트에서 나의 기본적인 구현실력이 부족함을 느껴서 구현문제를 풀어보기 위해 풀어본 문제. 역시나 구현의 약점이 들어났다. 처음부터 틀렸다. 최초 코드는 아래와 같은데 반례가 존재한다. 리스트에 넣어준 특수한 크로아디아 문자마다 입력으로 주어진 문자에서 개수를 세어주고 공백값으로 바꾸어 주었다. 그리고 마지막에 남은 문자에 대해서 길이를 구해서 전체 문자들의 개수를 구하려고 했다. 그런데 원래 nc=j 문자의 경우 c= 문자를 제거해주면 nj로 마뀌고 이경우 n과 j는 개별 문자로 임에도 nj 특수 문자로 개산이 되는 오류가 발생한다. 이 경우 개선하려면 특수 문자가 나오는 경우 *같은 문제..

Link : https://www.acmicpc.net/problem/1002 Note 성급하게 문제를 읽고 수도코드를 설계한 과정에서 실수가 많이 있었다. 두 원간의 교점문제라는 점은 파악했지만, 원의 교점이 생기는 경우를 분류할 때 분류과정에서 명확한 분류를 하지 못했다. 코드 중심의 최초 분류는 원의 중심인 두 점이 같을 때와 다를 때로 구분하고(원의 중심 두 점사이의 거리가 0일 때와 아닐때), 각각의 경우에 대해서 한점에서 만날 때 두점에서 만날 때, 만나지 않을 때, 겹칠 때를 나누어서 생각했다. 좋은 분류법은 아니였다. 이거는 코드 중심의 분류법에서는 좋지만 코드는 어디까지나 현실세계를 모방한 모델링이 제대로 되었을 때 의미가 있는 법이다. 다시 문제를 풀었을 때는 코드가 아닌 현실중심으로 ..