직사각형 별찍기
https://programmers.co.kr/learn/courses/30/lessons/12969
코딩테스트 연습 - 직사각형 별찍기
이 문제에는 표준 입력으로 두 개의 정수 n과 m이 주어집니다. 별(*) 문자를 이용해 가로의 길이가 n, 세로의 길이가 m인 직사각형 형태를 출력해보세요. 제한 조건 n과 m은 각각 1000 이하인 자연수
programmers.co.kr
문제 설명
이 문제에는 표준 입력으로 두 개의 정수 n과 m이 주어집니다.
별(*) 문자를 이용해 가로의 길이가 n, 세로의 길이가 m인 직사각형 형태를 출력해보세요.
제한 조건
- n과 m은 각각 1000 이하인 자연수입니다.
예시
입력
5 3
출력
*****
*****
*****
자바 풀이
import java.util.Scanner;
class Solution {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int a = sc.nextInt();
int b = sc.nextInt();
// System.out.println(a + b);
for(int i=0; i<b; i++){
for(int j=0; j<a; j++){
System.out.print("*");
}
System.out.println();
}
}
}
https://programmers.co.kr/learn/courses/30/lessons/17682
코딩테스트 연습 - [1차] 다트 게임
programmers.co.kr
다트 게임
예) 1S2D*3T
- 점수는 0에서 10 사이의 정수이다.
- 보너스는 S, D, T 중 하나이다.
- 옵선은 *이나 # 중 하나이며, 없을 수도 있다.
출력 형식
3번의 기회에서 얻은 점수 합계에 해당하는 정수값을 출력한다.
예) 37
입출력 예제
예제dartResultanswer설명1 | 1S2D*3T | 37 | 11 * 2 + 22 * 2 + 33 |
2 | 1D2S#10S | 9 | 12 + 21 * (-1) + 101 |
3 | 1D2S0T | 3 | 12 + 21 + 03 |
4 | 1S*2T*3S | 23 | 11 * 2 * 2 + 23 * 2 + 31 |
5 | 1D#2S*3S | 5 | 12 * (-1) * 2 + 21 * 2 + 31 |
6 | 1T2D3D# | -4 | 13 + 22 + 32 * (-1) |
7 | 1D2S3T* | 59 | 12 + 21 * 2 + 33 * 2 |
자바스크립트 풀이
// let dartResult = "1S2D*3T"; //1^1 * 2 + 2^2 * 2 + 3^3
let dartResult = "1D2S#10S";// 1D 2S# 10S
let answer = solution(dartResult);
console.log("answer>>> ", answer);//37
function solution(dartResult) {
var answer = 0;
// let arr = new Array(dartResult);//안됨
// let arr = Array.from(dartResult);//문자열을 배열로
let arr = [...dartResult];//문자열을 배열로
let pre_temp_num = 0;//이전값
for (let i = 0; i < arr.length; i++) {
let num = arr[i++] * 1;//숫자문자를 받음
console.log("type of num> ", typeof num, num);
if (num === 1) {
let temp = arr[i] * 1;
if (temp === 0) {
num = 10;
i++;
}
}
console.log("type of num> ", typeof num, num);
if (arr[i] === "D") {
num = Math.pow(num, 2);
} else if (arr[i] === "T") {
num = Math.pow(num, 3);
}
i++;
console.log("i>> ", i, ", arr[i]>>> ", arr[i], '총합>>>> ', answer);
//아래 로직은 있으면 하고 없으면 안함
if (arr[i] === "*") {
num = num * 2;
i++;
console.log("answer: ", answer);
console.log("pre_temp_num: ", pre_temp_num);
answer = answer + pre_temp_num;//이전 값을 더한다.
console.log('총합>>>> ', answer);
} else if (arr[i] === "#") {
num = num * (-1);
i++;
}
i--;//for문에서 +1 되기 때문에 미리 -1 한다.
console.log("num>>>>> ", num); // 첫번째 값, 두번째 값
answer += (num * 1);
pre_temp_num = (num * 1);//이전값을 저장함
console.log("i>> ", i, ", answer>> ", answer, ", pre_temp_num>> ", pre_temp_num);
}
return answer;
}
인상적인 자바스크립트 풀이
function solution(dart) {
const numStack = [];
const numArray = dart.replace(/[^0-9]/g, " ").split(" ").filter(v => v);
const strArray = dart.replace(/[0-9]/g, "").split("").filter(v => v.trim());
while (numArray.length) {
let num = numArray.shift();
let str = strArray.shift();
num = num ** {S: 1, D: 2, T: 3}[str];
if (["*", "#"].includes(strArray[0])) {
str = strArray.shift();
num *= "*" == str ? 2 : -1;
if ("*" == str) {
numStack[numStack.length-1] *= 2;
}
}
numStack.push(num);
}
return numStack.reduce((acc, v) => acc + v, 0);
}
자바 풀이 실패
import java.util.Arrays;
class Solution {
public int solution(String dartResult) {
char[] test = dartResult.toCharArray();
// System.out.println(test[0]);
int num = test[0] - '0';
String str = Character.toString(test[1]);
System.out.println(num+" "+str);
switch(str){
case "S": num = (int)Math.pow(num,1);
break;
case "D": num = (int)Math.pow(num,2);
break;
case "T": num = (int)Math.pow(num,3);
break;
case "*": num = num*2;
break;
case "#": num = num*(-1);
break;
}
int answer = 0;
return answer;
}
}
'학습 기록 (Learning Logs) > 알고리즘' 카테고리의 다른 글
[릿코드] twoSome (0) | 2022.03.15 |
---|---|
[스킬 체크 테스트 Level.1] 실패율, 두개뽑아서더하기 (0) | 2022.03.08 |
[스킬 체크 레벨 1] x만큼 간격이 있는 n개의 숫자 (완료) (0) | 2022.03.07 |
[프로그래머스]오픈채팅방 (0) | 2021.12.24 |
[프로그래머스] 숫자 문자열과 영단어 (0) | 2021.12.20 |