알고리즘 및 자료구조 10

문자열(String)을 이용한 문제 풀이 (3문제)

본 내용은 인프런 자바(Java) 알고리즘 문제풀이 : 입문 - 코딩테스트 대비 강의 문제를 기반으로 포스팅 한 내용입니다. 문제 문자거리 문자열 압축 암호(replace(), parseInt(string, 2)) 문제 1. 문자거리 문제 설명과 예시, 그리고 내가 접근하고자 했던 방식 한 개의 문자열 s와 문자 t가 주어지면 문자열 s의 각 문자가 문자 t와 떨어진 최소거리를 출력하는 프로그램을 작성 ex) teachermode e -> 1 0 1 2 1 0 1 2 2 1 0 고민해보기 정방향 -> 역방향 순으로 반복문을 통해 해당 요소가 있는지 확인하고, 값을 기준으로 최소거리를 저장하면 됐었음. 본 강의에서는 Math.min()을 이용해 기존에 있던 배열의 요소와 새로운 값을 비교해 더 작은 값을 ..

chapter. String (숫자만 추출)

주어진 문제는 간단했다. 입력받은 문자열에 숫자가 있으면, 숫자만 추출해 순서대로 자연수를 만들어서 출력하는 문제였다. // ex) g0en2T0s8eSoft -> 0, 2, 0, 8 == 208 이 문제를 어떻게 접근 할 것인가?에 대해 생각해보았고, // 나는 어떻게 접근할 것인가? -> 문자열 입력받고, 문자열의 길이만큼 반복을 통해 숫자와 문자를 필터-> // 그리고 숫자를 배열에 저장-> 배열 반환? (그럼 숫자와 문자를 어떻게 필터할건데? -> '아스키코드' 이용) 이렇게 생각을 했다. 내가 앞서 생각한 방식 int answer = 0; for(int i =0; i57 || (int)a 기존에 생각 했던 부분은 그냥 문자를 계속 더해주는 것... -> (실패) answer = answer*10..

백준 - 8958 번

https://www.acmicpc.net/problem/8958 8958번: OX퀴즈 "OOXXOXXOOO"와 같은 OX퀴즈의 결과가 있다. O는 문제를 맞은 것이고, X는 문제를 틀린 것이다. 문제를 맞은 경우 그 문제의 점수는 그 문제까지 연속된 O의 개수가 된다. 예를 들어, 10번 문제의 점수 www.acmicpc.net 설명 : 첫 줄에는 테스트 케이스가 주어지고, 각 테스트 케이스는 한 줄로 이루어져 있으며, 문자열을 O와 X으로만 이루어져있다. 이 문자열속 O는 각 1점인데, 연속으로 맞을 경우 1점씩 더 추가된다. ex) oooooxxx = 15점// oxoxoxoxo = 5점 문제에서 주어진대로 접근하면 될 것 같아 크게 문제가 없다고 생각했다. 그러나 내 생각과 실제 코드 작성과는 거..

백준 - 3052번

https://www.acmicpc.net/problem/3052 3052번: 나머지 각 수를 42로 나눈 나머지는 39, 40, 41, 0, 1, 2, 40, 41, 0, 1이다. 서로 다른 값은 6개가 있다. www.acmicpc.net 문제 설명 : 자연수 10개가 주어지면, 각 자연수를 42로 나눈 나머지를 구한 뒤, 나머지 값들 중 서로 다른 값이 몇 개 있는지 출력하는 문제 내 생각 : 입력된 값에 42로 나눈 나머지를 구한 뒤, 배열에 저장해서 요소를 확인하는 방법으로 문제를 접근했다. 문제를 접근하는 과정에서 어떻게 배열의 요소의 중복을 count 할 것인지에 대해 생각했고, 이 부분에서 좀 시간을 잡아먹었다. 내가 작성한 코드는 다음과 같다. BufferedReader br = new B..

백준 - 1546번

https://www.acmicpc.net/problem/1546 1546번: 평균 첫째 줄에 시험 본 과목의 개수 N이 주어진다. 이 값은 1000보다 작거나 같다. 둘째 줄에 세준이의 현재 성적이 주어진다. 이 값은 100보다 작거나 같은 음이 아닌 정수이고, 적어도 하나의 값은 0보 www.acmicpc.net 설명 : 첫 줄에는 과목의 수 N를 입력받고, 두 번째줄에는 현재의 성적을 입력받는데, 입력된 성적은 100보다 작거나 같은 음이 아닌 정수이고, 적어도 하나의 값은 0보다 크다. 자신이 입력한 점수 중 최댓값을 M, 모든 점수를 점수/M*100으로 고쳐서 계산 후 평균을 구하는 문제 이 문제를 풀면서 형 변환에 대해 생각을 안 했었는데, 결과값이 내가 의도한 방법과 다르게 나오자 형변환을 ..

백준 - 2577번

https://www.acmicpc.net/problem/2577 2577번: 숫자의 개수 첫째 줄에 A, 둘째 줄에 B, 셋째 줄에 C가 주어진다. A, B, C는 모두 100보다 크거나 같고, 1,000보다 작은 자연수이다. www.acmicpc.net 설명 : 세 자연수 A, B, C의 곱을 계산한 후 결과값에 0~9가 몇 번씩 쓰였는지를 구하는 문제 내 생각 : 우선 ABC를 입력받아야 하고, 입력받은 ABC를 곱한 값을 저장해야한다고 생각했다. 그래서 생각한 것이 "결과 값을 다시 문자열로 변환하고, 이 문자열을 한 문자씩 쪼개서 배열에다가 저장해야겠다"라고 생각했다. 코드를 작성하면서 왜이렇게 복잡해지고 불필요한 느낌이 들지? 라는 쎄한 생각이 들었다... 그렇게 한 문자씩 배열에 저장함과 동..

백준 -2562번

https://www.acmicpc.net/problem/2562 2562번: 최댓값 9개의 서로 다른 자연수가 주어질 때, 이들 중 최댓값을 찾고 그 최댓값이 몇 번째 수인지를 구하는 프로그램을 작성하시오. 예를 들어, 서로 다른 9개의 자연수 3, 29, 38, 12, 57, 74, 40, 85, 61 이 주어 www.acmicpc.net 설명 : 입력받은 9개의 서로 다른 자연수 중 최댓값을 찾고, 그 값이 몇번째 수인지를 찾아라 (입력되는 자연수는 100보다 작다) 내 생각 : 입력수가 고정이고, 최대값을 찾고, 그 값이 몇번째 있는지 찾기 위해선 배열이 필요하다 생각했다. 이 전의 문제와 동일하게 max 값을 주고 문제를 해결했는데 꼭 저 값이 아니더라도 음수의 값을 줘도 된다. 그 이유는 서로..

백준 - 10818번

https://www.acmicpc.net/problem/10818 10818번: 최소, 최대 첫째 줄에 정수의 개수 N (1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄에는 N개의 정수를 공백으로 구분해서 주어진다. 모든 정수는 -1,000,000보다 크거나 같고, 1,000,000보다 작거나 같은 정수이다. www.acmicpc.net 문제 설명 : N개의 정수를 입력받고, 입력받은 정수의 최대, 최소 값을 구해라 문제를 확인해보면 우선 첫 줄에는 정수 N개를 입력받아야 하고, 그 다음 자신이 입력하고자 하는 정수를 아래와 같이 입력해야 한다. 내 생각 : 항상 Scanner를 사용해서 문제를 풀다 BufferedReader를 알게 되고 후자의 방식을 사용하게 되었다. 문제를 확인하고 입력과 ..

백준 2588번 - 곱셈 (Scanner와 BufferedReader)

https://www.acmicpc.net/problem/2588 2588번: 곱셈 첫째 줄부터 넷째 줄까지 차례대로 (3), (4), (5), (6)에 들어갈 값을 출력한다. www.acmicpc.net 문제 (세 자리 수) × (세 자리 수)는 다음과 같은 과정을 통하여 이루어진다. (1)과 (2)위치에 들어갈 세 자리 자연수가 주어질 때 (3), (4), (5), (6)위치에 들어갈 값을 구하는 프로그램을 작성하시오. 입력 첫째 줄에 (1)의 위치에 들어갈 세 자리 자연수가, 둘째 줄에 (2)의 위치에 들어갈 세자리 자연수가 주어진다. 출력 첫째 줄부터 넷째 줄까지 차례대로 (3), (4), (5), (6)에 들어갈 값을 출력한다. 내 생각 : 최근 단계별 백준 문제를 풀기 시작하면서 궁금한 부분들..