728x90
반응형
 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

모든 문제의 출처는 위임을 밝힘ㅋ

[ C++ ]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <string>
#include <vector>
 
using namespace std;
 
string solution(int a, int b) {
    string answer = "";
    
    int month[12= { 312931303130313130313031 };
    string day_string[7= { "FRI""SAT""SUN""MON""TUE""WED""THU" };
    int sumday = 0// 2016년 1월 1일부터 ~ 2016년 a월 b일까지 총 날짜 수를 구함.
    
    for(int i=1; i<a; i++)
        sumday += month[i-1]; // a월 직전 달까지 모든 날짜를 더한 후
    sumday += (b-1); // a월의 b일까지 더하고 1일부터 시작하니 1일을 뺀다.
    
    return day_string[sumday%7];
}
cs

[ Python ]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
def solution(a, b):
    answer = ''
    month = [ 312931303130313130313031 ]
    day_string = [ "SUN""MON""TUE""WED""THU""FRI""SAT" ]
    sumday = 0
    
    for i in range(1, a):
        sumday += month[i-1]
    sumday = sumday + (b-1)
    
    return day_string[(sumday+5)%7]
    
    # 아래 한 줄로 7번 라인 ~ 11번 라인을 대체할 수 있다.
    # return day_string[(sum(month[:a-1-1])+b-1+5)%7] 
    # 위의 내용들과 같다.
cs
728x90
반응형
728x90
반응형
 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

모든 출처는 위 사이트이다 ㅋㅋ

어렵게 꼬은 문제일 줄 알았는데 아주 아주 간단한 문제였다.

[C++]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
 
#include <string>
#include <vector>
 
using namespace std;
 
long long solution(int a, int b) {
    long long answer = 0;
    long long tmp = a;
    
    if(a>b) // a가 b보다 큰 경우, 예를 들면 a=6, b=3 -> 이 경우는 swap
    {
        a = b;
        b = tmp;
    }
    
    for(;a<=b;a++)
        answer += a;
    
    return answer;
}
cs

[Python]

1
2
3
4
5
6
7
8
9
10
11
def solution(a, b):
    answer = 0
    if b<a:
        tmp = a
        a = b
        b = tmp
    
    for i in range(a, b+1):
        answer = answer + i
    
    return answer
cs
728x90
반응형
728x90
반응형
 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

모든 문제 출제는 프로그래머스 ㅎㅎ

주어진 n과 m에 대해 최대공약수, 최소공배수를 리턴하는 문제이다.

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
#include <string>
#include <vector>
 
using namespace std;
 
vector<int> solution(int n, int m) {
    vector<int> answer;
    int gcd = 1, lcm = 0, tmp = 0;
    
    if(n>m)
    {
        tmp = n;
        n = m;
        m = tmp;
    }
    
    for(int i=2; i<=n; i++)
        if(n%i==0 && m%i==0)
            gcd = i;
 
    lcm = (n * m) / gcd;
    
    answer.push_back(gcd);
    answer.push_back(lcm);
    return answer;
}
cs

이게 짜증나는게 i를 2부터 증가시켜가면서, n<m일 때, 2부터 n 내에서 n과 m이 나머지가 0이 되는 수가 없을 때까지 나눈 후 계속해서 gcd와 lcm을 구해놨드만 lcm은 구하는 공식이 있었다. 뻘짓인가..;;

728x90
반응형
728x90
반응형
 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

모든 출처는 프로그래머스이다 ㅋㅋ

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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#include <string>
#include <stack>
#include <cmath>
#include <iostream>
 
using namespace std;
 
int solution(int n) {
    int answer = 0;
    stack<int> s1; 
    int dig = 0;
    
    // 일단 3진법으로 변환하면서 바로 스택에 넣는다.
    // -> 스택에서 빼면 뒤집혀진 3진법 형태로 나옴. -> 뒤집는 연산을 할 필요가 없다.
    while(n!=0)
    {
        s1.push(n%3);
        n /= 3;        
    }
    
    // 스택에서 하나씩 빼면서 십진수 변환
    while(!s1.empty())
    {
        answer += s1.top()*pow(3,dig++);
        s1.pop();
    }
    
    return answer;
}
 
 
#include <string>
#include <stack>
 
using namespace std;
 
int solution(int n) {
    int answer = 0;
    stack<int> s1; 
    int k = 1;
    
    // 일단 3진법으로 변환하면서 바로 스택에 넣는다.
    // -> 스택에서 빼면 뒤집혀진 3진법 형태로 나옴. -> 뒤집는 연산을 할 필요가 없다.
    while(n!=0)
    {
        s1.push(n%3);
        n /= 3;        
    }
    
    // 스택에서 하나씩 빼면서 십진수 변환
    while(!s1.empty())
    {
        answer += s1.top()*k;
        s1.pop();
        k *= 3// pow 대신할 k
    }
    
    return answer;
}
 
cs

일반적인 진법 변환 문제이다.

처음에 바보같이 pow 함수를 썼는데, k를 거듭으로 곱해 나가면서, 처리해도 되는 문제였다. 그래서 위에는 pow를 사용, 아래는 k를 사용하여 n제곱 처리를 해준다.

728x90
반응형
728x90
반응형
 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

모든 출저는 위임 ㅋㅋ

문제 설명

단어 s의 가운데 글자를 반환하는 함수, solution을 만들어 보세요. 단어의 길이가 짝수라면 가운데 두글자를 반환하면 됩니다.

재한사항

  • s는 길이가 1 이상, 100이하인 스트링입니다.

입출력 예

                  s                                                                   return

abcde c
qwer we

 

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
31
32
33
34
35
36
37
38
39
40
#include <string>
#include <vector>
#include <iostream>
 
using namespace std;
 
string solution(string s) {
    string answer = "";
    int len = s.size();
    
    if(len % 2 == 0)
    {
        answer += s[(len/2)-1];
        answer += s[len/2];
    }
    else
        answer = s[len/2];
    
    return answer;
}
 
 
 
#include <string>
#include <vector>
 
using namespace std;
 
string solution(string s) {
    string answer = "";
    int len = s.size();
    
    if(len % 2 == 0)
        answer = s.substr(len/2-12); 
    else
        answer = s.substr(len/21);
 
    
    return answer;
}
cs

위 코드는 인덱스 조작을 통해서, 아래 코드는 string의 substr 함수를 이용해서 구한 결과이다.

substr(시작위치, 추출할 길이) 형식으로 입력하면 된다. 

728x90
반응형

'프로그래밍응용 > 오답노트' 카테고리의 다른 글

프로그래머스, 최대공약수와 최대공배수(C++)  (0) 2021.02.23
프로그래머스, 3진법 뒤집기(C++)  (0) 2021.02.23
SQL4  (0) 2021.02.23
프로그래머스, 같은 숫자는 싫어(C++)  (0) 2021.02.23
SQL3  (0) 2021.02.23

+ Recent posts