홀짝에 따라 다른 값 반환하기
사용 언어 : Java
레벨 : 0
📎 https://school.programmers.co.kr/learn/courses/30/lessons/181932
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 설명
문자열 code가 주어집니다.code를 앞에서부터 읽으면서 만약 문자가 "1"이면 mode를 바꿉니다. mode에 따라 code를 읽어가면서 문자열 ret을 만들어냅니다.
mode는 0과 1이 있으며, idx를 0 부터 code의 길이 - 1 까지 1씩 키워나가면서 code[idx]의 값에 따라 다음과 같이 행동합니다.
mode가 0일 때code[idx]가 "1"이 아니면 idx가 짝수일 때만 ret의 맨 뒤에 code[idx]를 추가합니다.code[idx]가 "1"이면 mode를 0에서 1로 바꿉니다.mode가 1일 때code[idx]가 "1"이 아니면 idx가 홀수일 때만 ret의 맨 뒤에 code[idx]를 추가합니다.code[idx]가 "1"이면 mode를 1에서 0으로 바꿉니다.
문자열 code를 통해 만들어진 문자열 ret를 return 하는 solution 함수를 완성해 주세요.
단, 시작할 때 mode는 0이며, return 하려는 ret가 만약 빈 문자열이라면 대신 "EMPTY"를 return 합니다.
제한사항
- 1 ≤ code의 길이 ≤ 100,000
- code는 알파벳 소문자 또는 "1"로 이루어진 문자열입니다.
입출력 예
✏️ 풀이
문제는 굉장히 긴데 그냥 1일 경우에는 mode를 바꾸고 mode가 0일 땐 짝수번째 code를, mode가 1일 땐 홀수번째 code를 한 글자씩 붙이면 되는 간단한 문제였다. 나는 그냥 code를 한 글자씩 보면서 그 글자가 1일 땐 mode를 변경하고 (boolean 사용) mode의 참거짓과 code의 홀짝인지를 판별해서 둘 다 맞으면 ret에 그 글자를 붙이도록 코드를 짰다.
class Solution {
public String solution(String code) {
String answer = "";
boolean mode = false;
for(int i = 0; i < code.length(); i++) {
if (code.charAt(i) == '1') {
mode = mode ? false : true;
} else if (mode && i % 2 != 0) {
answer += code.charAt(i);
} else if (!mode && i % 2 == 0) {
answer += code.charAt(i);
}
}
return answer.length() == 0 ? "EMPTY" : answer;
}
}
그런데 다른 사람의 풀이를 봤는데 한 고수분의 코드를 발견하였다..
class Solution {
public String solution(String code) {
StringBuilder answer = new StringBuilder();
int mode = 0;
for (int i = 0; i < code.length(); i++) {
char current = code.charAt(i);
if (current == '1') {
mode = mode == 0 ? 1 : 0;
continue;
}
if (i % 2 == mode) {
answer.append(current);
}
}
return answer.length() == 0 ? "EMPTY" : answer.toString();
}
}

진짜 굉장함.. mode가 0일땐 짝수, mode가 1일 땐 홀수 라는 점을 이용해서 i를 2로 나누었을 때 mode와 동일하면... 완전히 문제의 요점을 안 것 같아서 대단하다고 느껴짐 ㅠㅠㅠ.. 한 수 배우고 갑니다 총총...
주사위 게임2
사용 언어 : Java
레벨 : 0
📎 https://school.programmers.co.kr/learn/courses/30/lessons/181930https://school.programmers.co.kr/learn/courses/30/lessons/181932
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 설명
1부터 6까지 숫자가 적힌 주사위가 세 개 있습니다. 세 주사위를 굴렸을 때 나온 숫자를 각각 a, b, c라고 했을 때 얻는 점수는 다음과 같습니다.
세 숫자가 모두 다르다면 a + b + c 점을 얻습니다.
세 숫자 중 어느 두 숫자는 같고 나머지 다른 숫자는 다르다면 (a + b + c) × (a2 + b2 + c2 )점을 얻습니다.
세 숫자가 모두 같다면 (a + b + c) × (a2 + b2 + c2 ) × (a3 + b3 + c3 )점을 얻습니다.
세 정수 a, b, c가 매개변수로 주어질 때, 얻는 점수를 return 하는 solution 함수를 작성해 주세요.
제한사항
- a, b, c는 1이상 6이하의 정수입니다.
입출력 예
✏️ 풀이
이 문제는 전부 다를 경우 각 변수를 1제곱한 값을 답에 곱해주고, 하나만 다를 경우 2제곱한 값까지 곱해주고, 모두 같을 경우 3제곱한 값까지 곱해주는 것이라서 count 변수를 선언해서 if문에서 각 변수들이 같은지 확인하고 같으면 하나씩 count를 증가시켜주고, for문에서 count 만큼 제곱한 값을 정답에 곱해주는 식으로 풀었다.
class Solution {
public int solution(int a, int b, int c) {
int answer = 1;
int count = 1;
if(a == b || b == c || c == a)
count++;
if(a == b && b == c)
count++;
for(int i = 1; i <= count; i++) {
answer *= Math.pow(a, i) + Math.pow(b, i) + Math.pow(c, i);
}
return answer;
}
}
오랜만에 코테 복습 좀 할 겸 입문문제를 좀 풀어봤는데 역시 코딩은 꾸준히 해야한다.. 며칠 안하니까 벌써 까먹고 난리,, 다시 오늘부터 꾸준히 해보려고 한다! 화이띵
'알고리즘' 카테고리의 다른 글
[프로그래머스] 기초 문제 풀이 (0 떼기, 치킨 쿠폰, 간단한 식 계산하기, 세 개의 구분자, 배열의 원소만큼 추가하기, 무작위로 K개의 수 뽑기) (0) | 2024.11.19 |
---|---|
[프로그래머스] 기초 문제 풀이 (두 수의 합, 특정 문자열로 끝나는 가장 긴 부분 문자열 찾기, ad 제거하기, 접미사인지 확인하기, 공백으로 구분하기 1, X 사이의 개수) (0) | 2024.11.18 |
[백준/Java] #14503 로봇 청소기 (0) | 2023.06.20 |
[백준/Java] #16985 Maaaaaaaze (0) | 2023.06.20 |
[백준/Java] #18808 스티커 붙이기 (2) | 2023.06.02 |