반응형
250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- AI
- SKT
- 패캠챌린지
- 패스트캠퍼스후기
- R
- 한번에 끝내는 Java/Spring 웹 개발 마스터 초격차 패키지 Online.
- 한번에 끝내는 Java/Spring 웹 개발 마스터 초격차 패키지
- 직장인자기계발
- 알버트
- 한번에끝내는Java/Spring웹개발마스터초격차패키지
- albert
- 패스트캠퍼스
- 직장인인강
- 한번에 끝내는 Java/Spring 웹 개발 마스터 초격차 패키지 Online
Archives
- Today
- Total
제주 탈출 일지
[c++][python] 프로그래머스 레벨 1 - 체육복 본문
728x90
반응형
programmers.co.kr/learn/courses/30/lessons/42862?language=cpp
코딩테스트 연습 - 체육복
점심시간에 도둑이 들어, 일부 학생이 체육복을 도난당했습니다. 다행히 여벌 체육복이 있는 학생이 이들에게 체육복을 빌려주려 합니다. 학생들의 번호는 체격 순으로 매겨져 있어, 바로 앞번
programmers.co.kr
91점짜리 코드. 테스트케이스 7번에서 오류가 나는데 뭔지 모르겠다.
solution(5, vector<int>(4,5), vector<int>(3,4)) 테스트 케이스를 추가하면 오류가 난다고 뜨는데, 웹 컴파일러에서 보면 정확하게 4가 나온다. 미띤
#include <string>
#include <vector>
#include <map>
using namespace std;
int solution(int n, vector<int> lost, vector<int> reserve) {
int answer = 0;
map<int, int> student; //학생번호, 체육복 갯수.
for(int i = 1; i <= n; i++){ //학생이 가진 체육복 갯수 초기화
student[i] = 1;
}
for(vector<int>::iterator iter = lost.begin(); iter != lost.end(); ++iter){ //도난당한 체육복
student[*iter]--;
}
for(vector<int>::iterator iter = reserve.begin(); iter != reserve.end(); ++iter){ //여벌 체육복
student[*iter]++;
}
for(vector<int>::iterator iter = lost.begin(); iter != lost.end(); ++iter){ //도난당한 학생 기준으로 옆을 확인
if(*iter - 1 > 0 && student[*iter - 1] > 1){ // 2번학생부터 오른쪽을 살펴보세요.
student[*iter]++;
student[*iter - 1]--;
}
if(*iter < n && student[*iter + 1] > 1){ // 왼쪽
student[*iter]++;
student[*iter + 1]--;
}
}
for(int i = 1; i <= n; i++)
{
if(student[i] >= 1){
answer++;
}
}
return answer;
}
2021.06.03 수정)
python3으로 다시 풀어보았는데 바로 풀린다.
def solution(n, lost, reserve):
answer = 0
# 1 2 3 4 5
# 1 3 5 reserve
# 2 4 lost
# 1 2 3 4 5
# 3 reseve
# 2 4 lost
student = [1] * n
for i in reserve:
student[i-1] += 1
for i in lost:
student[i-1] -= 1
for i in range(len(student)) :
if student[i] == 0:
if i > 0 and i < n-1 :
if student[i+1] == 2:
student[i] += 1
student[i+1] -= 1
elif student[i-1] == 2:
student[i] += 1
student[i-1] -= 1
elif i == 0:
if student[i+1] == 2:
student[i] += 1
student[i+1] -= 1
elif i == n:
if student[i-1] == 2:
student[i] += 1
student[i-1] -= 1
for i in student:
if i >= 1:
answer += 1
return answer
단순히 없는 학생의 오른쪽 왼쪽을 확인하여 여분이 있는 학생의 옷을 빌린다. 이때 인덱스 오류를 막기 위해서 i = 0, i > 0 and i < n, i = n 3가지 범위로 나누어서 확인했다.(첫번째와 마지막 학생은 한쪽에만 학생이 존재하기 때문)
그리고 student 리스트를 확인할 때, 2개 가지고 있는 학생까지 모두 확인하여 answer를 리턴하면 된다.
728x90
반응형
'코딩 테스트' 카테고리의 다른 글
[C++] 프로그래머스 레벨 1 - 가운데 글자 가져오기 (0) | 2020.10.27 |
---|---|
[C++] 프로그래머스 레벨 1 - 2016년 (0) | 2020.10.27 |
[c++][python3] 프로그래머스 레벨 1 - K번째 수 (0) | 2020.10.26 |
[c++][python3] 프로그래머스 레벨 1 - 모의고사 (0) | 2020.10.26 |
[c++] nhn pre-test 1 - 1 (0) | 2020.10.24 |
Comments