알고리즘
-
시저 암호 [문제 설명] [문제 풀이] 주어진 문자열을 주어진 수만큼 옮겼을 때의 결과를 반환하는 문제이다. 주어진 문자가 소문자, 대문자, 공백으로만 이루어졌고 문자를 변환해야 하는 문제이기에 아스키 코드를 통해 풀 수 있다는 것을 짐작할 수 있다. 공백에 대한 예외 처리를 하고 소대문자에 대한 조건을 걸어서 문자들 변환해준 결과를 결과 문자열에 붙인다. 만약 해당 문자에 주어진 수를 더한 값이 소대문자의 범위를 넘어간다면 이를 연산해 해당 소대문자의 앞 번호로 변환해 주는 작업을 통해 최종 결과를 얻을 수 있다. [소스 코드]
[프로그래머스]Level 1 시저 암호시저 암호 [문제 설명] [문제 풀이] 주어진 문자열을 주어진 수만큼 옮겼을 때의 결과를 반환하는 문제이다. 주어진 문자가 소문자, 대문자, 공백으로만 이루어졌고 문자를 변환해야 하는 문제이기에 아스키 코드를 통해 풀 수 있다는 것을 짐작할 수 있다. 공백에 대한 예외 처리를 하고 소대문자에 대한 조건을 걸어서 문자들 변환해준 결과를 결과 문자열에 붙인다. 만약 해당 문자에 주어진 수를 더한 값이 소대문자의 범위를 넘어간다면 이를 연산해 해당 소대문자의 앞 번호로 변환해 주는 작업을 통해 최종 결과를 얻을 수 있다. [소스 코드]
2022.11.27 -
숫자 문자열과 영단어 [문제 설명] [문제 풀이] 받아온 문자열에 존재하는 영단어들을 숫자로 변경하는 작업이 필요하다. 숫자에 관련된 단어들을 정의하고 주어진 문자열에 이와 동일한 것들이 잇다면 모두 변경해주는 작업을 한다. Java에 replace 함수가 있는 걸 모르고 풀었을 때, 코드 길이가 상당히 길었지만 존재함을 알고 푸니 상당히 쉬운 문제였다. [소스 코드]
[프로그래머스]Level 1 숫자 문자열과 영단어숫자 문자열과 영단어 [문제 설명] [문제 풀이] 받아온 문자열에 존재하는 영단어들을 숫자로 변경하는 작업이 필요하다. 숫자에 관련된 단어들을 정의하고 주어진 문자열에 이와 동일한 것들이 잇다면 모두 변경해주는 작업을 한다. Java에 replace 함수가 있는 걸 모르고 풀었을 때, 코드 길이가 상당히 길었지만 존재함을 알고 푸니 상당히 쉬운 문제였다. [소스 코드]
2022.11.27 -
이상한 문자 만들기 [문제 설명] [문제 풀이] 처음 문제를 풀때는, 공백을 기준으로 전체 문장을 자르고 단어들을 나누었다. 나눈 후, 각 단어의 짝수 인덱스에 해당하는 문자를 대문자로, 나머진 소문자로 변경해서 풀었다. 이렇게 문제에 접근하니 공백 처리를 올바르게 하지 못해 문제를 해결하지 못했다. 이후, 아래 코드로 푼 방식으로 문제를 접근했다. 주어진 문자열을 각각의 문자로 나누지 않고 인덱스에 접근한다. 해당 인덱스에 접근했을 때 공백이 아니라면 해당 인덱스부터 해당 문자에서 양수의 인덱스인지 짝수의 인덱스인지 계산한다. 이를 통해, 최종적으로 각 단어를 변환하고 결과를 도출할 수 있다. [소스 코드]
[프로그래머스]Level 1 이상한 문자 만들기이상한 문자 만들기 [문제 설명] [문제 풀이] 처음 문제를 풀때는, 공백을 기준으로 전체 문장을 자르고 단어들을 나누었다. 나눈 후, 각 단어의 짝수 인덱스에 해당하는 문자를 대문자로, 나머진 소문자로 변경해서 풀었다. 이렇게 문제에 접근하니 공백 처리를 올바르게 하지 못해 문제를 해결하지 못했다. 이후, 아래 코드로 푼 방식으로 문제를 접근했다. 주어진 문자열을 각각의 문자로 나누지 않고 인덱스에 접근한다. 해당 인덱스에 접근했을 때 공백이 아니라면 해당 인덱스부터 해당 문자에서 양수의 인덱스인지 짝수의 인덱스인지 계산한다. 이를 통해, 최종적으로 각 단어를 변환하고 결과를 도출할 수 있다. [소스 코드]
2022.11.27 -
[문제 설명] [문제 풀이] 문제를 한 번 풀고 난 후, 개선된 방법으로 다시 문제를 풀었다. 처음엔 대문자와 소문자를 나누어 각각의 배열에 저장한 후 정렬했다. 정렬된 배열들을 1개의 배열로 합쳤다. 해당 방법으로 문제를 풀고 과거의 나는 어떻게 풀었을지 궁금해 예전에 했던 걸 찾아보았다. 2번째 코드는 예전과 한 것을 사용한 것이다. 아스키코드에서 대문자는 소문자보다 정수값이 작다. 이를 활용해 문제를 풀었다. 문자형의 정수값을 배열에 저장한 후, 이를 정렬한다. 그리고 다시 문자형으로 변환해 결과를 반환한다. 위 코드는 동일하게 아스키 코드를 사용했지만, 아스키코드 값을 사용하지 못한 예시다. 아래 코드가 더 깔끔하게 문제를 푼 코드라고 생각한다. [소스 코드]
[프로그래머스]Level 1 문자열 내림차순으로 배치하기[문제 설명] [문제 풀이] 문제를 한 번 풀고 난 후, 개선된 방법으로 다시 문제를 풀었다. 처음엔 대문자와 소문자를 나누어 각각의 배열에 저장한 후 정렬했다. 정렬된 배열들을 1개의 배열로 합쳤다. 해당 방법으로 문제를 풀고 과거의 나는 어떻게 풀었을지 궁금해 예전에 했던 걸 찾아보았다. 2번째 코드는 예전과 한 것을 사용한 것이다. 아스키코드에서 대문자는 소문자보다 정수값이 작다. 이를 활용해 문제를 풀었다. 문자형의 정수값을 배열에 저장한 후, 이를 정렬한다. 그리고 다시 문자형으로 변환해 결과를 반환한다. 위 코드는 동일하게 아스키 코드를 사용했지만, 아스키코드 값을 사용하지 못한 예시다. 아래 코드가 더 깔끔하게 문제를 푼 코드라고 생각한다. [소스 코드]
2022.11.27 -
[문제 설명] [문제 풀이] 처음 HashMap을 사용해 Key값이 존재하는 dictionary로 풀었었다. 하지만, 동일한 키값을 처리하지 못해 해당 방법으로 문제를 해결하지는 못했다. Java에서의 배열 및 리스트 정렬 방법과 lambda 형식에 대해서 알아보았고 이를 통해 최종적으로 문제를 풀 수 있었다. 가장 먼저, 주어진 String 배열의 요소들에서 n 자리에 위치한 알파벳들을 꺼내 2차원 String 배열의 0번째 인덱스에 저장했다. 해당 값을 key값으로 사용하기 위함이다. 이후, 문자열을 그대로 1번째 인덱스에 저장한다. 기준 정렬을 하기 위해, Java의 lambda식을 사용했다. 만약 key값이 동일하고 string의 값이 다르다면 string값을 기준으로 정렬한다. key값이 다르다..
[프로그래머스]Level 1 문자열 내 마음대로 정렬하기[문제 설명] [문제 풀이] 처음 HashMap을 사용해 Key값이 존재하는 dictionary로 풀었었다. 하지만, 동일한 키값을 처리하지 못해 해당 방법으로 문제를 해결하지는 못했다. Java에서의 배열 및 리스트 정렬 방법과 lambda 형식에 대해서 알아보았고 이를 통해 최종적으로 문제를 풀 수 있었다. 가장 먼저, 주어진 String 배열의 요소들에서 n 자리에 위치한 알파벳들을 꺼내 2차원 String 배열의 0번째 인덱스에 저장했다. 해당 값을 key값으로 사용하기 위함이다. 이후, 문자열을 그대로 1번째 인덱스에 저장한다. 기준 정렬을 하기 위해, Java의 lambda식을 사용했다. 만약 key값이 동일하고 string의 값이 다르다면 string값을 기준으로 정렬한다. key값이 다르다..
2022.11.27 -
모의고사 [문제 설명] [문제 풀이] 각각의 사람들이 몇 문제를 맞춘지 확인한 후, 맞춘 갯수의 최댓값을 구한다. 최댓값과 동일한 사람들은 결과 배열에 입력하고 해당 값을 반환해준다. [소스 코드]
[프로그래머스]Level 1 모의고사모의고사 [문제 설명] [문제 풀이] 각각의 사람들이 몇 문제를 맞춘지 확인한 후, 맞춘 갯수의 최댓값을 구한다. 최댓값과 동일한 사람들은 결과 배열에 입력하고 해당 값을 반환해준다. [소스 코드]
2022.11.27 -
로또의 최고 순위와 최저 순위 [문제 설명] [문제 풀이] 현재 문제에서 잃어버린 당첨번호는 0으로 표시된다. 0이 모두 당첨번호일 때, 최고 등수일 것이고 모두 당첨번호가 아닐 때, 최저 등수일 것이다. 이를 활용해 문제르 풀어보자. 우선 0을 제외한 실제로 맞춘 개수를 구한다. 이후, 0의 개수를 구하고 실제로 맞춘 개수 + 0의 개수를 해 최고 등수일 때의 맞춘 개수를 구한다. 0의 개수를 더하지 않은 실제로 맞춘 개수는 자동으로 최저 등수일 때의 맞춘 개수가 될 것이다. 현재 우리가 구해야 하는 것은 맞춘 개수가 아닌 등수이기에 맞춘 개수를 뒤집어 등수를 구한다. [소스 코드]
[프로그래머스]Level 1 로또의 최고 순위와 최저 순위로또의 최고 순위와 최저 순위 [문제 설명] [문제 풀이] 현재 문제에서 잃어버린 당첨번호는 0으로 표시된다. 0이 모두 당첨번호일 때, 최고 등수일 것이고 모두 당첨번호가 아닐 때, 최저 등수일 것이다. 이를 활용해 문제르 풀어보자. 우선 0을 제외한 실제로 맞춘 개수를 구한다. 이후, 0의 개수를 구하고 실제로 맞춘 개수 + 0의 개수를 해 최고 등수일 때의 맞춘 개수를 구한다. 0의 개수를 더하지 않은 실제로 맞춘 개수는 자동으로 최저 등수일 때의 맞춘 개수가 될 것이다. 현재 우리가 구해야 하는 것은 맞춘 개수가 아닌 등수이기에 맞춘 개수를 뒤집어 등수를 구한다. [소스 코드]
2022.11.27 -
두 개 뽑아서 더하기 [문제 설명] [문제 풀이] 서로 다른 인덱스에서 값들을 꺼내 연산을 한 결과들에 중복이 존재할 수 있다. 해당 경우를 결과를 저장할 배열에 넣는다면 중복된 값을 하나로 합쳐야 하는 추가 작업시 생성된다. 결과 배열에 넣기 전부터 중복된 값이 있는지 확인 후, 있다면 넣지 않는 방향으로 문제를 푸는 것이 효율적이다. flag 배열을 만들고 임의의 두 수를 더 한 결과를 인덱스로 사용해 해당 수가 연산의 결과로 나온 적이 있는지 체크한다. 체크를 위해 나온적이 있다면 해당 인덱스에 1을 저장하고 아니면 아무것도 저장하지 않는다. 모든 연산이 끝나면 배열을 오름차순으로 정렬해 반환한다. [소스 코드]
[프로그래머스]Level 1 두 개 뽑아서 더하기두 개 뽑아서 더하기 [문제 설명] [문제 풀이] 서로 다른 인덱스에서 값들을 꺼내 연산을 한 결과들에 중복이 존재할 수 있다. 해당 경우를 결과를 저장할 배열에 넣는다면 중복된 값을 하나로 합쳐야 하는 추가 작업시 생성된다. 결과 배열에 넣기 전부터 중복된 값이 있는지 확인 후, 있다면 넣지 않는 방향으로 문제를 푸는 것이 효율적이다. flag 배열을 만들고 임의의 두 수를 더 한 결과를 인덱스로 사용해 해당 수가 연산의 결과로 나온 적이 있는지 체크한다. 체크를 위해 나온적이 있다면 해당 인덱스에 1을 저장하고 아니면 아무것도 저장하지 않는다. 모든 연산이 끝나면 배열을 오름차순으로 정렬해 반환한다. [소스 코드]
2022.11.27