일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- s
- 윤성우의 열혈 자료구조
- 이스케이프 문자
- 혼자 공부하는 C언어
- R
- stream
- C 언어 코딩 도장
- Serialization
- buffer
- coding test
- 알기쉬운 알고리즘
- 윤성우 열혈자료구조
- Graph
- insertion sort
- 이것이 자바다
- Selection Sorting
- C programming
- 메모리구조
- Algorithm
- datastructure
- list 컬렉션
- JSON
- Stack
- Today
- Total
목록Problem Solving/BOJ (76)
Engineering Note
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일 때와 아닐때), 각각의 경우에 대해서 한점에서 만날 때 두점에서 만날 때, 만나지 않을 때, 겹칠 때를 나누어서 생각했다. 좋은 분류법은 아니였다. 이거는 코드 중심의 분류법에서는 좋지만 코드는 어디까지나 현실세계를 모방한 모델링이 제대로 되었을 때 의미가 있는 법이다. 다시 문제를 풀었을 때는 코드가 아닌 현실중심으로 ..
Link : https://www.acmicpc.net/problem/16198 Note 문제를 처음에 접근했을 당시에는 예시 입출력들을 가지고 규칙을 찾아본 결과, 그리디 과정으로 규칙이 찾아져서 코드를 제출했더니 틀렸다. 내가 처음에 풀이한 그리디 과정은 문제의 조건에 따라 i 구슬을 제거할때 i-1,i+1의 에너지 구슬로 모은 에너지 값이 최대가 되는 구슬로 정하였다. 첫 번째 예시의 경우 [1,2,3,4]에서 3을 골랐을때 8(2*4)가 가장 크기 때문에 3을 제거해주고 남은 2를 제거해줄 때 에너지는 4가 되어 총 에너지 합은 12가 된다. [100,2,1,3,100]의 경우 100(2) (에너지(제거숫자)), 6(1), 100(3)에서 큰 값 100이 같은 경우 제거 숫자는 작은 경우, [10..

Link : https://www.acmicpc.net/problem/15649 Note 문제를 잘 읽고 이해하면 쉽게 풀 수 있는 문제다. 1부터 N까지의 자연수 중에서 중복 없이 M개를 고른 수열을 출력하는 프로그램을 작성하면 된다. 예를 들면 N이 4고 M이 2라면 1부터 4까지 자연수 중에서 중복 없이 2개를 고른 수열을 구하면 된다. nums = [1,2,3,4] 수가 있고 2개를 고르는 방법을 나타내면 다음과 같다. 1부터 N에서 수를 하나 추출하고 다시 중복 없이 1부터 N에서 수를 하나 추출하는 과정을 재귀적으로 구현하면된다. 1번의 과정은 추출한 수가 M개가 될때까지 반복 수행한다. Code import sys def choose(set_nums): global answers,n,m if..
Link : https://www.acmicpc.net/problem/1463 Note 문제풀이과정 회고 처음에는 정수 별 특징으로 수를 분류가 가능할 것으로 생각하였다. 예를 들면 2의 배수, 3의 배수, 혹은 3의 배수가 아닌 홀수로 분류하고, 문제에 주어진 대로 짝수라면 2로 나누고 홀수라면 3으로 나누어 떨어지는지 확인하고 나누어 떨어지면 나누고, 아니라면 -1을 하는 식으로 연산을 수행해보았다. 하지만 이 방식에서는 예외 사항들이 많았다. 예를 들면 10의 경우 짝수이기 때문에 처음에 2로 나누어 진행하면 5가 된다. 그리고 그 다음 과정을 진행하면 다음과 같다. '10 -> 5 -> 4 -> 2 -> 1' 하지만 이 방식은 최소 연산 사용이 아니다. '10 -> 9 -> 3 -> 1'이라는 더..