1. 가운데 글자 가져오기(https://school.programmers.co.kr/learn/courses/30/lessons/12903)
// c언어
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
char* solution(const char* s) {
int len = strlen(s);
// 짝수면 글자를 2개만 남기고,
// 홀수면 글자를 1개만 남긴다.
int harlf = 2 - (len % 2);
int copyStart = (len / 2) - (1 - 1 * (len % 2));
char* answer = (char*)malloc(harlf);
memset(answer, 0, harlf);
strncat(answer, &s[copyStart], harlf);
return answer;
}
// js
function solution(s) {
var answer = '';
var len = s.length;
var harlf = 2 - parseInt(len % 2);
var copyStart = parseInt(len / 2) - (1 - 1 * parseInt(len % 2));
answer += s.substr(copyStart, harlf);
return answer;
}
2. 수박수박수박수박수박수?(https://school.programmers.co.kr/learn/courses/30/lessons/12922?language=c)
// c언어
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
char* solution(int n) {
char* answer = (char*)malloc(n * strlen("수"));
memset(answer, 0, n * strlen("수"));
for(int i=0; i<n; i++)
{
if(i % 2 == 0)
strcat(answer, "수");
else
strcat(answer, "박");
}
return answer;
}
// js
function solution(n) {
var answer = '';
for(var i=0; i<n; i++){
if(parseInt(i % 2) == 0)
answer += "수";
else
answer += "박";
}
return answer;
}
3. 내적(https://school.programmers.co.kr/learn/courses/30/lessons/70128)
// c언어
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
int solution(int a[], size_t a_len, int b[], size_t b_len) {
int answer = 0;
for(int i=0; i<a_len; i++)
{
answer += (a[i] * b[i]);
}
return answer;
}
// js
function solution(a, b) {
var answer = 0;
for(var i=0; i<a.length; i++){
answer += (a[i] * b[i]);
}
return answer;
}
4. 약수의 개수와 덧셈(https://school.programmers.co.kr/learn/courses/30/lessons/77884)
// c언어
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
int solution(int left, int right) {
int answer = 0;
int count = 0;
int i = 1;
while(1)
{
if(right < left)
break;
if(left < i)
{
printf("%d의 약수 개수는 %d개\n", left, count);
if(count % 2 == 0)
answer += left;
else
answer -= left;
left++;
count = 0;
i = 1;
}
if(left % i == 0)
count++;
i++;
}
return answer;
}
// js
function solution(left, right) {
var answer = 0;
var count = 0;
var i = 1;
while(1)
{
if(right < left)
break;
if(left < i)
{
if(count % 2 == 0)
answer += left;
else
answer -= left;
left++;
count = 0;
i = 1;
}
if(left % i == 0)
count++;
i++;
}
return answer;
}
이 문제는 다른 사람의 것이 좀 더 효율적으로 풀었다. 하여, 해당 방식도 같이 서술하고자 한다.
function solution(left, right) {
var answer = 0;
for (let i = left; i <= right; i++) {
if (Number.isInteger(Math.sqrt(i))) {
answer -= i;
} else {
answer += i;
}
}
return answer;
}
이 사람은 제곱근을 활용하여 푼 것을 알 수 있는데, 왜 그런가하니 제곱근이 정수면 약수의 개수가 홀수이기 때문이다.
한 눈에 봐도 30줄에 가까웠던 라인이 10줄을 간신히 넘길 정도로 줄어든 것이 보인다. 이래서 코딩을 할 때 어느정도 수학이 필요한가...
'프로그래머스' 카테고리의 다른 글
24/07/11 SQL 문제 (0) | 2024.07.11 |
---|---|
24/07/09 SQL 문제 (0) | 2024.07.09 |
24/07/04 프로그래머스 알고리즘 (0) | 2024.07.04 |
24/07/01 프로그래머스 알고리즘 (0) | 2024.07.01 |
24/06/28 SQL 문제 (0) | 2024.06.28 |